有关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. influxDB+grafana安装配置及邮件告警发送配置

    1. InfluxDB安装 下载包并解压: $:wgethttps://dl.influxdata.com/influxdb/releases/influxdb-1.3.6_linux_amd64.t ...

  2. Python实现简单的HttpServer

    要写一个类似tomcat的简易服务器,首先需弄清楚这几点: 1. 客户端(Client)和服务端(Server)的角色及作用 角色A向角色B请求数据,这时可以把A视为客户端,B视为服务端.客户端的主要 ...

  3. 如何在cocos中为节点添加监听事件

    一般在监听键盘事件时,可是采用以下方式来监听键盘事件: 以及记得定义取消监听的函数(这个摧毁函数会自己调用吗?): 同时这里还有一种传统的监听方式: 但是cocos官方的文档建议我们不要使用这种方式, ...

  4. 视频转码成mp4格式,添加关键帧,添加元数据,把元数据放在第一帧,可拖动

    作者测试是在windows下使用,所以下载的页面地址是: http://ffmpeg.zeranoe.com/builds/点击页面上的Download FFmpeg git-738ebb4 64-b ...

  5. C# 调用百度地图 Web 服务 API

    最近公司项目中需要根据两个地点的交通路径和距离做一些数据推荐,为了程序的稳定和用户体验所以想从百度地图 API 采集数据保存到数据库中,经过一翻研究之后选定了百度地图 Web 服务 API 中的 Di ...

  6. Linux系统下安装JDK

    注意:linux系统下使用mount命令挂载Windows系统下的共享文件,详情见我的另一篇“Linux系统挂载Windows系统下的共享文件” 一.安装jdk 1.进入usr目录cd /usr 2. ...

  7. Codeforces 715B. Complete The Graph 最短路,Dijkstra,构造

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF715B.html 题解 接下来说的“边”都指代“边权未知的边”. 将所有边都设为 L+1,如果dis(S,T ...

  8. laravel好文

    https://laravelacademy.org/post/8464.html   最佳实践 laravel代码的书写规范以及优化 https://laravelacademy.org/post/ ...

  9. 网络编程-Python高级语法-闭包

    什么叫闭包?通俗来说就是函数里嵌套函数,从表现形式来看,内部函数引用外部函数的作用域里的变量,那么内部函数就称为闭包 举例说明: 1.闭包=函数块+定义函数时的环境,inner就是函数块,x就是环境 ...

  10. [wordpress]更新插件时,免去FTP操作

    我们先进入服务器 先找到wordpress配置文件wp-config.php,用locate命令寻找文件所在路径. sudo updatedb locate wp-config.php 然后cd到改路 ...