list的基本操作实现
有关list的相关实现,主函数没有写很多,每个部分目前没发现有问题;
#include <iostream>
#include <stdio.h> using namespace std; typedef int ElemType;
typedef int Status;
#define OK 1
#define ERROR 0 struct Node
{
ElemType Data;
Node* Prior;
Node* Next;
} ; struct List
{
int length;
Node* head;
Node* tail;
List(int l=, Node* h=, Node* t=):length(l),head(h),tail(t) {}
} ; void Pop_Front(List &L);///pop_front() 删除第一个元素
void Pop_Front(List &L);///pop_front() 删除第一个元素
void Push_back(List &L, int x);///push_back() 在list的末尾添加一个元素
void Push_front(List &L, int x);///push_front() 在list的头部添加一个元素
bool Empty(List L);///empty() 如果list是空的则返回true
int Back(List L);///back() 返回最后一个元素
int Front(List L);///front() 返回第一个元素
void Clear(List &L); ///clear() 删除所有元素
void Erase(List &L, int x);///erase() 删除一个元素 int main()
{
List L; Push_back(L, );
Push_front(L, );
Push_back(L, );/// 2 1 3
//Push_back(L, 3);/// 2 1 3
//Push_front(L, 4);/// 2 1 3 int ans = Back(L);
printf("%d\n", ans); int ans1 = Front(L);
printf("%d\n", ans1); Erase(L, ); //Pop_back(L);
//Pop_back(L); //Clear(L); ans = Back(L);
printf("%d\n", ans); return ;
}
bool Empty(List L)///empty() 如果list是空的则返回true
{
return (L.length == );
} int Back(List L)///back() 返回最后一个元素
{
if(Empty(L))
{
printf("链表为空\n");
return -;
}
return L.tail->Data;
}
int Front(List L)///front() 返回第一个元素
{
if( Empty(L) )
{
printf("链表为空\n");
return -;
}
return L.head->Data;
}
void Clear(List &L) ///clear() 删除所有元素
{
while(!Empty(L))
{
Node* s = L.head;
L.head = L.head->Next;
L.length --;
delete s;
}
} void Pop_back(List &L)///pop_back() 删除最后一个元素
{
if(Empty(L))
return;
Node* s = L.tail; L.tail = s->Prior;
L.tail->Next = NULL; L.length --; delete s;
} void Pop_Front(List &L)///pop_front() 删除第一个元素
{
if(Empty(L))
return;
Node* s = L.head; L.head = s->Next;
L.head->Next = NULL; L.length --; delete s;
} void Erase(List &L, int x)///erase() 删除一个元素
{
Node* p = L.head; while(p)
{
//printf("%d\n", p->Data);
if(p->Data == x)
{
if(p->Prior == NULL)
Pop_Front(L);
else if(p->Next == NULL)
Pop_back(L);
else
{
Node* s = p;
p->Prior->Next = p->Next;
p->Next->Prior = p->Prior;
delete s;
}
}
p = p->Next;
} }
void Push_back(List &L, int x)///push_back() 在list的末尾添加一个元素
{
Node* s = new Node;
s->Data = x; if(Empty(L))
{
L.head = s;
L.tail = s;
}
else
{
L.tail->Next = s;
s->Prior = L.tail;
L.tail = s;
}
L.length ++;
}
void Push_front(List &L, int x)///push_front() 在list的头部添加一个元素
{
Node* s = new Node; s->Data = x;
if(Empty(L))
{
L.head = s;
L.tail = s;
}
else
{
s->Next = L.head;
L.head->Prior = s;
L.head = s;
}
L.length ++;
}
list的基本操作实现的更多相关文章
- Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作
一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- 三、Redis基本操作——List
小喵的唠叨话:前面我们介绍了Redis的string的数据结构的原理和操作.当时我们提到Redis的键值对不仅仅是字符串.而这次我们就要介绍Redis的第二个数据结构了,List(链表).由于List ...
- 二、Redis基本操作——String(实战篇)
小喵万万没想到,上一篇博客,居然已经被阅读600次了!!!让小喵感觉压力颇大.万一有写错的地方,岂不是会误导很多筒子们.所以,恳请大家,如果看到小喵的博客有什么不对的地方,请尽快指正!谢谢! 小喵的唠 ...
- 一、Redis基本操作——String(原理篇)
小喵的唠叨话:最近京东图书大减价,小喵手痒了就买了本<Redis设计与实现>[1]来看看.这里权当小喵看书的笔记啦.这一系列的模式,主要是先介绍Redis的实现原理(可能很大一部分会直接照 ...
- Linq查询基本操作
摘要:本文介绍Linq查询基本操作(查询关键字) - from 子句 - where 子句 - select子句 - group 子句 - into 子句 - orderby 子句 - join 子句 ...
- C++ map的基本操作和使用
原文地址:http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可 ...
- python之最强王者(10)———文件(File)、输入输出的基本操作
1. Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 2.打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式. ...
- 【项目管理】图解GitHub基本操作
一.注册并登陆到github网站 1.1.打开github网站首页(https://github.com/) 1.2.注册一个自己的github账号 创建账户后再验证自己的邮箱,然后就可以登陆到git ...
随机推荐
- Python Libhunt
有一个网站,Python Libhunt: https://python.libhunt.com 这个网站类似于Github的Awesome xxx系列,不过它是随时更新的,排序方式,分类也更加友好. ...
- ROS-PCL点云库的安装
网上各种说安装点云库还慢,中间出现一些没有依赖库的情况,但在我这里都是很顺利,难道是一开始安装了ROS的原因?不是很清楚,暂且将过程写下来. 一,下载PCL $ git clone https://g ...
- H2 Database Engine
http://www.h2database.com/html/main.html H2 Database Engine Welcome to H2, the Java SQL database. Th ...
- 使用Pycharm创建一个Django项目
在使用python写脚本一段时间后,想尝试使用Django来编写一个python项目,现做以下记录备忘: 1.创建项目 如果本地没有安装与所选python版本对应Django版本,pycharm会自动 ...
- Javascript我学之六对象工厂函数与构造函数
本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘. 概述 使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法. 然而,除了这两种常用的对象创建方式,JavaScript ...
- MariaDB报错Plugin 'InnoDB' init function returned error.解决方案
重新安装MariaDB后,服务一直启动不起来,查看日志有以下错误: InnoDB: No valid checkpoint found. InnoDB: If you are attempting d ...
- leetcode刷题第一日<两数和问题>
开始就用到了c++的哈希表是真的恶心,首先学习一波基础知识 https://blog.csdn.net/u010025211/article/details/46653519 下面放下大佬的代码 cl ...
- XIV Open Cup named after E.V. Pankratiev. GP of Europe
A. The Motorway 等价于找到最小和最大的$L$满足存在$S$使得$S+(i-1)L\leq a_i\leq S+i\times L$ 即 $S\leq\min((1-i)L+a_i)$ ...
- bzoj2982: combination(lucas定理板子)
2982: combination Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 664 Solved: 397[Submit][Status][Di ...
- angular.identity()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...