有关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的基本操作实现的更多相关文章

  1. Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

    一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...

  2. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  3. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  4. 三、Redis基本操作——List

    小喵的唠叨话:前面我们介绍了Redis的string的数据结构的原理和操作.当时我们提到Redis的键值对不仅仅是字符串.而这次我们就要介绍Redis的第二个数据结构了,List(链表).由于List ...

  5. 二、Redis基本操作——String(实战篇)

    小喵万万没想到,上一篇博客,居然已经被阅读600次了!!!让小喵感觉压力颇大.万一有写错的地方,岂不是会误导很多筒子们.所以,恳请大家,如果看到小喵的博客有什么不对的地方,请尽快指正!谢谢! 小喵的唠 ...

  6. 一、Redis基本操作——String(原理篇)

    小喵的唠叨话:最近京东图书大减价,小喵手痒了就买了本<Redis设计与实现>[1]来看看.这里权当小喵看书的笔记啦.这一系列的模式,主要是先介绍Redis的实现原理(可能很大一部分会直接照 ...

  7. Linq查询基本操作

    摘要:本文介绍Linq查询基本操作(查询关键字) - from 子句 - where 子句 - select子句 - group 子句 - into 子句 - orderby 子句 - join 子句 ...

  8. C++ map的基本操作和使用

    原文地址:http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可 ...

  9. python之最强王者(10)———文件(File)、输入输出的基本操作

    1. Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 2.打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式. ...

  10. 【项目管理】图解GitHub基本操作

    一.注册并登陆到github网站 1.1.打开github网站首页(https://github.com/) 1.2.注册一个自己的github账号 创建账户后再验证自己的邮箱,然后就可以登陆到git ...

随机推荐

  1. 一、cryptsetup文件系统加密

    cryptsetup文件系统加密   今天做了SYC攻防题的文件系统挂载部分,在找到挂载最内层的final文件时发现mount无法识别,这也许就是一个加密的文件系统吧,还好-在龟速的 网络环境下查阅到 ...

  2. wx获取地理位置

    1.公众号配置. 2.引入js 一个放在根目录下的txt文件. 3.1)第一个ajax为获取后台传给的wx.config需要的参数:wx.ready().通过ready接口处理成功验证.然后才是wx. ...

  3. day17递归函数(二分法查找)

    递归函数: 如果函数包含了对其自身的调用,该函数就是递归的: example 1:二分法查找的实现: def find_recursion(l,aim,start=0,end=None): #end不 ...

  4. 14.并发与异步 - 3.C#5.0的异步函数 -《果壳中的c#》

    14.5.2 编写异步函数 private static readonly Stopwatch Watch = new Stopwatch(); static void Main(string[] a ...

  5. RabbitMQ 消息队列 二

    一:查看MQ的用户角色 rabbitmqctl list_users 二:添加新的角色,并授予权限 rabbitmqctl add_user xiaoyao 123456 rabbitmqctl se ...

  6. 枚举特性FlagsAttribute的用法

    先看官方的解释:指示可以将枚举作为位域(即一组标志)处理. 看起来并不好理解,到底什么是作为位域处理? 其实说的通俗点就是用二进制的表示方式来处理数学集合概念中关于集合的或与非等运算方法. 有什么用 ...

  7. Angular路由——子路由

    一.子路由语法: 二.实例 在商品详情页面,除了显示商品id信息,还显示了商品描述,和销售员的信息. 通过子路由实现商品描述组件和销售员信息组件展示在商品详情组件内部. 1.新建2个组件修改其内容 n ...

  8. Spring Boot 静态资源路径分析

    最近在接触一个看公司的java后台项目(采用的耶鲁大学开源的一个cas单点登录系统),用的是框架是Spring Boot,用的模板是Thymeleaf,于是我生成一个Spring Boot的项目,并且 ...

  9. 分享关于搭建高性能WEB服务器的一篇文章

    这篇文章主要介绍了Centos5.4+Nginx-0.8.50+UWSGI-0.9.6.2+Django-1.2.3搭建高性能WEB服务器的相关资料,需要的朋友可以参考下(http://m.0813s ...

  10. IDEA中添加servlet的jar

    问题解决:办法1:使用Project Structure 方法二:使用Maven 在pom.xml文件中添加如下