数据结构——链表(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 更高效.然而,它在随机访问 ...
随机推荐
- std::map中函数用法集合
1 STL的map表里有一个erase方法用来从一个map中删除掉指令的节点 2 eg: 3 map<string,string> mapTest; 4 typedef map< ...
- Javascript声明变量类型
声明变量类型 当您声明新变量时,可以使用关键词 "new" 来声明其类型: var carname=new String; var x= new Number; var y= ne ...
- 雪碧图(sprite)
雪碧图 是一种将网页上常用且不经常变动的小图标集中在一张大图中,根据网页需求来显示图片的技术. 可以提高网页加载速度,增加用户体验. 其原理是通过html块状元素建立一个满足需求的视图窗口,然后在窗口 ...
- 2015年最棒的10个 JavaScript 框架
JavaScript是最流行的前端开发程序设计语言.它为WEB开发者提供了能够设计出具有丰富功能.干净用户界面的WEB应用的能力.JavaScript框架使得WEB应用的设计变的简单,并且它能够提供很 ...
- 用css3画企鹅
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta na ...
- zoj 1962 How Many Fibs?(字符串化为数字处理)
事实证明还是,题目拿到手之后,还是还是好好动手划一下比较好,不然直接想打哪!打到哪!很容易乱掉的.将数字倒着弄成字符串比较好处理. #include<stdio.h> #include&l ...
- spring+hibernate基础
把数据库的配置信息写在一个文件中 jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc\:mysql\://localhost\:3306/ ...
- Ajax+asp.net实现用户登陆 转自http://www.shangxueba.com/jingyan/2933319.html
这篇文章主要介绍了Ajax+asp.net实现用户登陆,主要是为了练习ajax的使用方法,有需要的小伙伴参考下. 以用户登录为例练习ajax的使用方法 login.html <!DOCTYPE ...
- vector中resize和reserve的区别,代码验证
#include <vector> using namespace std; int main() { vector<int> resizeVect; vector<in ...
- Oracle Enterprise Manager 11g 输入用户名和口令 点击“登录”按键后没反应,也不报错,是什么原因?
在tnsnames.ora文件中检查设置好像没什么问题,用sqlplus也可以正常操作orcl 问题找到了,其实可简单,https://localhost:1158/em/console/logon/ ...