数据结构——链表(linkedlist)
基本分类:
1、单向链表
2、带尾指针的单向链表
3、双向循环链表
以下分类进行说明
1、单向链表
基本元素:*front //头节点
*next //下一节点
声明:node<T>*p;
初始化:p=new node<T>(nodeValue,nextpointer);
简单遍历:
template <typename T>
void writeLinkedList(node<T> *front)
{
node<T> *curr;
curr=front;
while(curr!=NULL)
{
cout<<curr->nodeValue<<" ";
curr=curr->next;
}
}
插入元素
- 插在表头:
node<T> *newnode;
newnode=new node<T>(item,front); //使新节点的next指向头指针
front=newnode; //使新节点成为头指针
- 插在某位置:
node<T> *prev=NULL,*curr=front;
while(curr->nodevalue!=searchItem){
prev=curr;
curr=curr->next;
}
newnode->next=curr;
prev->next=newnode;
删除元素
- 删表头
node<T> *curr=front;
front=front->next;
delete curr;
- 删某元素
node<T> *prev=NULL,*curr=front;
while(curr->nodevalue!=searchItem){
prev=curr;
curr=curr->next;
}
prev->next=curr->next;
delete curr;
具体代码实现:
void eraseValue(node<T> *front,const T &target)
{
node<T>*curr=front,*prev=NULL;
bool FoundItem=false;
while(curr!=NULL && !FoundItem) //未到链表末尾且未找到节点
{
if(curr->nodeValue==target)
{
if(prev==NULL) //所删节点为头节点
front=front->next;
else
prev->next=curr->next;
delete curr;
FoundItem=true;
}
else
{
prev=curr;
curr=curr->next;
}
}
}
2、双指针单向链表
基本元素:单向链表的基础上加上
*back //尾指针
//各种操作与单向链表类似,加上在末尾插入数据和末尾删除,此处不一一列出
3、双向循环链表
表头(header):
只包含prev指针和next指针 无data
dlinkedlist类
class dnode
{
public:
T nodeValue;
dnode <T> *prev;
dnode <T> *next;
dnode(){
next=this;
prev=this;
//构造表头,不含nodeValue
}
dnode(const T & value):
nodeValue(value)
{
next=this;
prev=this;
}
dnode <T> *insert (dnode <T>*curr,const T&item)
{
dnode<T> *newNode,*prevNode;
newNode=new dnode<T>(item); //调用有参构造函数
prevNode=curr->prev; newNode->prev=prevNode;
newNode->next=curr;
prevNode->next=newNode;
curr->prev=newNode; return newNode;
}
void erase(dnode<T> *curr)
{
if(curr->next==curr)//只有表头 空list
return; curr->prev->next=curr->next;
curr->next->prev=curr->prev; delete curr;
}
void writeDlinkedlist(dnode<T> *header)//遍历
{
dnode<T> *p=header->next;
while(p!=header)
{
cout<<p->nodeValue<<" ";
p=p->next;
}
}
}
数据结构——链表(linkedlist)的更多相关文章
- 模板 - 数据结构 - 链表/LinkedList
一个只供删除的双向链表,为了简单不再引入head节点,而且也不进行next的套娃操作.空间使用略微多了一些,但是无伤大雅. struct LinkedList { static const int M ...
- 数据结构之链表(LinkedList)(三)
数据结构之链表(LinkedList)(二) 环形链表 顾名思义 环形列表是一个首尾相连的环形链表 示意图 循环链表的特点是无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活. 看一 ...
- 数据结构之链表(LinkedList)(二)
数据结构之链表(LinkedList)(一) 双链表 上一篇讲述了单链表是通过next 指向下一个节点,那么双链表就是指不止可以顺序指向下一个节点,还可以通过prior域逆序指向上一个节点 示意图: ...
- 《数据结构与算法分析——C语言描述》ADT实现(NO.00) : 链表(Linked-List)
开始学习数据结构,使用的教材是机械工业出版社的<数据结构与算法分析——C语言描述>,计划将书中的ADT用C语言实现一遍,记录于此.下面是第一个最简单的结构——链表. 链表(Linked-L ...
- Python—数据结构——链表
数据结构——链表 一.简介 链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构.由一系列节点组成的元素集合.每个节点包含两部分,数据域item和指向下一个节 ...
- (js描述的)数据结构[链表](4)
(js描述的)数据结构 [链表](4) 一.基本结构 二.想比于数组,链表的一些优点 1.内存空间不是必须连续的,可以充分利用计算机的内存,事项灵活的内存动态管理. 2.链表不必再创建时就确定大小,并 ...
- 数据结构和算法(Golang实现)(12)常见数据结构-链表
链表 讲数据结构就离不开讲链表.因为数据结构是用来组织数据的,如何将一个数据关联到另外一个数据呢?链表可以将数据和数据之间关联起来,从一个数据指向另外一个数据. 一.链表 定义: 链表由一个个数据节点 ...
- Redis数据结构—链表与字典的结构
目录 Redis数据结构-链表与字典的结构 链表 Redis链表节点的结构 Redis链表的表示 Redis链表用在哪 字典 Redis字典结构总览 Redis字典结构分解 Redis字典的使用 Re ...
- Redis数据结构—链表与字典
目录 Redis数据结构-链表与字典 链表 Redis链表节点的结构 Redis链表的表示 Redis链表用在哪 字典 Redis字典结构总览 Redis字典结构分解 哈希算法 解决键冲突 rehas ...
- 链表LinkedList、堆栈Stack、集合Set
链表LinkedList LinkedList 也像 ArrayList 一样实现了基本的 List 接口,但它在 List 中间执行插入和删除操作时比 ArrayList 更高效.然而,它在随机访问 ...
随机推荐
- 嵌入式系统 Boot Loader
基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念.软件设计的主要任务以及结构框架等内容.
- NGUI Button 3中点击事件的触发
NGUI事件的种类很多,比如点击.双击.拖动.滑动等等,他们处理事件的原理几乎万全一样,本文只用按钮来举例. 1.直接监听事件 把下面脚本直接绑定在按钮上,点击按钮触发的方法名必须为OnClick,当 ...
- VS2015+MySql EF的配置问题
自己做笔记,防止以后各种找! 去MySql下载最新版的安装包,MySql For Windows全部就可以了,根据开发需求安装功能,然后安装MySql的步骤上网去找一大堆. 注意事项: 第一:必须把V ...
- 控制所生成的servlet的结构: JSP page指令
在JSP中,主要有3种类型的指令:page, include和taglib.page指令允许我们通过类的导入.servlet超类的定制.内容类型的设置.以及诸如此类的事物来控制servlet的结构.p ...
- Problem E: Product
Problem E: ProductTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 18 Solved: 14[Submit][Status][Web Bo ...
- Java学习之equals和hashcode的关系
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(has ...
- 技术是容易学会的(Copy)
1)自信第一.自信这东西很是奇怪,人有可能一开始会莫明其妙的自信,但一切都从这开始的.你觉得自己行你就一定会变得行,反之,如果觉得自已不行,那一定会不行.信心是我们转动飞轮的第一步,有了这一步我们的能 ...
- win7下文件名不能定义为con(任何文件格式)
从linux传输压缩包到win7下解压缩,总是提示出错,可是在linux下解压都很正常,于是定位出错的文件,发现是con.c和con.h文件,经排查,原因如下: CON是DOS下的特殊设备名 如下由系 ...
- javascript 变量 命名规范 变量的作用域
原文:javascript 变量 命名规范 变量的作用域 大家好,我是小强老师,今天讲解的是变量 变量 小时候我们学过 这个 应用题 : X+1=2; 问 X 等于几? 答案是 1 对了,很聪 ...
- HDU 3398 String
题目大意:一个长为n的01字符串,使前缀任意0的数量不大于1的数量,求方案数…… 题解:高一模拟赛时做过,是卡特兰数的几何意义,将字符串变为矩阵寻路,不可越过对角线,那么就是卡特兰数了,C(n+m, ...