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 ...
随机推荐
- 【原创】大数据基础之Zookeeper(4)应用场景
1 集群配置管理 应用服务器的配置通常会放到properties文件中,格式为: system1.module2.prop3=value4 然后启动的时候加载,这样带来的问题是启动后无法修改,想修改必 ...
- 【原创】大数据基础之Ambari(5)通过Ambari部署Hue
ambari2.7.3(hdp3.1) 安装 hue4.2 ambari的hdp中原生不支持hue安装,下面介绍如何通过添加service的方式使ambari支持hue安装: 官方:http://ge ...
- php 安装redis php扩展
下载文件 下载上面文件解压并拷贝至php的ext目录下 如果 PHP版本不对 接下来根据你所拟定的版本去如下这两个网址下载文件 1.http://windows.php.net/downloads/p ...
- 20 常用模块 hashlib hmac:加密 xml xlrd xlwt:excel读|写 configparser subprocess
hashlib模块:加密 加密: 1.有解密的加密方式 2.无解密的加密方式:碰撞检查 hashlib -- 1)不同数据加密后的结果一定不一致 -- 2)相同数据的加密结果一定是一致的 import ...
- 初学python之路-day03
我在前面的文章提到了变量的概念,这里详细介绍下变量的命名.变量名,只能是字母.数字及下划线 "_" 任意组成,而且不能以数字开头.在命名变量时,尽量避免与系统关键词重名,如:'an ...
- springboot配置文件priperties大全
flyway.baseline-description 执行基线时标记已有Schema的描述. flyway.baseline-on-migrate 在没有元数据表的情况下,针对非空Schema执行迁 ...
- pl/sql学习(5): 触发器trigger/事务和锁
(一)触发器简单介绍 触发器是由数据库的特定时间来触发的, 特定事件主要包括以下几种类型: (1)DML: insert, update,delete 增删改 (2)DDL: create, alte ...
- 网络层HTPPS和HTTP的概念与区别
HTPPS和HTTP的概念 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP ...
- Barber paradox
According to Wikipedia, the well known barber paradox states like this: The barber is the "one ...
- 微服务化不同阶段 Kubernetes 的不同玩法
本文由 网易云发布. 作为容器集群管理技术竞争的大赢家,Kubernetes 已经和微服务紧密联系,采用 Kubernetes 的企业往往都开始了微服务架构的探索.然而不同企业不同阶段的微服务实践面 ...