有关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. how2heap学习笔记

    github源代码地址 这里只分析glibc2.25堆分配的特性,为了方便调试编译时使用 gcc -g -no-pie <input_file_name> -o <output_fi ...

  2. 1、在Centos上安装Grafana

    1.如果你想将老版本的Grafana升级为新版本的Grafana,可以阅读链接中的文档指南: http://docs.grafana.org/installation/upgrading/ 2.使用y ...

  3. PHP 数组反转(值有重复)

    public function indexssss() { $a=[ 'Input.txt' => 'Randy', 'Code.py' => 'Stan', 'Output.txt' = ...

  4. postgre dinstinct on()的使用

    意思是DISTINCT ON ( expression [, …] )把记录根据[, …]的值进行分组,分组之后仅返回每一组的第一行. 需要注意的是,如果你不指定ORDER BY子句,返回的第一条的不 ...

  5. json server服务器

    json文件可以理解为数据库 一.json-server快速搭建RESTAPI 安装: sudo cnpm install -g json-server 启动(使用): json-server指向js ...

  6. 源码安装cx_Oracle(适合离线环境)

    cd ~/tools unzip instantclient-basic-linux.x64-12.2.0.1.0.zip mv instantclient_12_2 /opt/ export ORA ...

  7. 【JAVA】servlet 定时启动

    步骤一: web.xml中加上如下的代码: <load-on-startup>10</load-on-startup>这句话是重点. <servlet> <s ...

  8. 修改pip安装源加快python模块安装

    用pip安装依赖包时默认访问https://pypi.python.org/simple/,但是经常出现不稳定以及访问速度非常慢的情况,国内厂商提供的pipy镜像目前可用的有: http://pypi ...

  9. python接口测试-认识POST请求

    上午和一个大神交流了一下,给我了一点建议:多做笔记,勤复盘:及时记录自己,最好的提升不是来自于别人,而是来自于自身.我觉得挺有道理的,分享出来.共勉 说正事. 今天把post请求的大概内容看了一下.虽 ...

  10. MVC中EF代码优先问题

    在练习Mvc项目时,提示如下数据库错误: The model backing the 'EFDbContext' context has changed since the database was ...