线性表———单链表,循环链表,双向链表基本操作及概念
单链表
所谓单链表即为一条链,一个结点连接着下一个结点,每一个结点都含有数据域和指针域,数据域存放数据信息,指针域存放下一结点的地址信息。
如图,第一个结点ZHAO的存储地址为61,指针域为13,即下一结点是QIAN,依次往下,WANG为最后一个结点指针域为NULL即为空。
单链表的存储结构
typedef struct LNode{ElemType data;//数据域 struct Lnode *next;//指针域
}LNode,*LinkList;
单链表的基本操作
1.初始化
Status InitList(LinkList &L){//构造一个空的单链表L L= new LNode;//生成新节点作为头结点,用指针L指向头结点 L->next=NULL;//头结点的指针域置空; return OK;
}
2.取值
Status GerElem(LinkList L,int i,ElemType &e){//找到第i个元素的值,用e返回改元素的值p= L->next;int j=1;//初始化,p指向首元结点,计数器j初值为1 while(p&&j<i){p=p->next;//指针p指向下一个结点 j++;//计数器j++ }if(!p||j>i) return ERROR;//指针p为空或者i值不合法 e=p->data;//取第i个结点的数据域 return Ok;
}
3.查找
Status LocateElem(LinkList L,ElemType &e){//在L中查询e所在的第一个位置 p= L->next;int j=1;while(p && p->data != e){p=p->data;j++;}if(!p) return ERROR;//若p为空,查询失败 return j;//p非空返回查询到的位置
}
4.插入
Status ListInsert(LinkList &L,int i,EeemType e){//在第i个位置插入一个结点 p=L;j=0;while(p && j<i-1){//使p指向第i-1个元素 p=p->next ;j++}if(!p||j>i-1) return ERROR; s=new NLode;s->data=e;s->next=p->next;//让*s的指针域指向ai p->next=s;//让*p的指针域指向s; return OK;
}
5.删除
Status ListDelete(LinkList &L,int i){//删除第i个位置的结点p=L;j=0;while((p->next) && j<i-1){p=p->next;j++;}if(!(p->next)|| j>i+1) return ERROR;q=p->next;p->next=q->next;delete q;return OK;
}
6.创建单链表
void CreateList_H(LinkList &L,int n){//前插法L=new NLode;L->next =NULL;for(int i=0;i<n;i++){p=new LNode;cin>>p->data ;p->next=L->next;L->next=p;}
}
void CreateList_R(LinkList &L,int n){//后插法L=new NLode;L->next =NULL;r=L;for(int i=0;i<n;i++){p=new LNode;cin>>p->data;p->next=NULL;r->next=p;r=p;
若想记录结点的数量可以用L->data记录即使用头结点记录元素数量。
循环链表
循环链表与单链表唯一不同就是循环链表最后一个结点的指针域指向首元结点。
判别条件由p!=NULL||p->next!=NULL变为p!=L||p->next!=L。
双向链表
所谓双向链表就是一个结点存储前后两个结点的地址信息。
双向链表的存储结构
typedef struct DuLNode{ElemType data;struct DuLNode *prior; //指向前驱 streuc DuLNode *next; //指向后驱
}DuLNode,*DuLNodeList;
基本操作
插入
Status ListInsert_DuL(LinkList &L,int i,ElemType e){if(!(p=GetElem_DuL(L,i)))return ERROR;s=new DuLNODE;s->data=e;s->prior=p->prior;p->prior->next=s;s->next=p;p->prior=s;return OK;
}
删除
Status ListDelete_DuL(LinkList &L,int i){if(!(p=GetElem_DuL(L,i)))return ERROR;p->prior->next=p->next;p->next->prior=p->prior;delete p;return OK;
}
参考书籍《数据结构》严蔚敏版
线性表———单链表,循环链表,双向链表基本操作及概念相关推荐
- python的线性链表_Python线性表——单链表-阿里云开发者社区
Python线性表--单链表 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列.线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一个直接前驱,有且只有一个直接后继, ...
- 链表的基本概念以及java实现单链表-循环链表-双向链表
前言 线性结构是非常简单且常用的数据结构,而线性表则是一种非常典型的线性结构. 线性表定义 线性表的数据结构 链表 单链表 单链表的定义 单链表的插入和删除 单链表的遍历,清空,判空,获取指定结点 循 ...
- Algorithms_基础数据结构(03)_线性表之链表_双向链表
文章目录 大纲图 双向链表 双向链表的基本结构 双向链表的基本操作 头插 尾插 中间部位插入 删除头部 删除尾部 删除中间位置的数据 查找 更新 Code 总结 大纲图 双向链表 Algorithms ...
- 数据结构_Java_基于 线性表-单链表的初始化、逆序、去重、非递减序列的合并(开辟新链表先整体插入一个链表全部元素,再遍历另外一个链表寻找合适位置插入 、开辟新链表实现舍弃原链表)等操作实现
写在前面 不久前学习了数据结构线性表-数组-链表的相关知识,用C/C++语言实现了 单链表的系列相关操作 .见往期博客: 数据结构实验2_C语言_基于顺序表的非递减有序表的合并.线性表元素的增.删.改 ...
- 2.2线性表——单链表基本操作的实现
注意:以下内容均省略思路,只有代码和时间复杂度.此内容为本人学习过程中的一些学习记录,如有错误,恳请各位指正.建议,末学将感激不尽! 目录 用结构指针描述单链表 初始化链表 判断空表 销毁单链表 清空 ...
- 第二章:2线性表---单链表表示和实现
前言: 为避免在使用线性表顺序存储结构的时,需插入和删除需大量移动元素的弊端. 本节讨论线性表的另外一种表示方法---链式存储结构: 由于它不要求逻辑上相邻的元素在物理位置上相邻,因此它对元素的插入和 ...
- 线性表----单链表
一,实验内容:链表的创建.插入与删除操作 二.程序清单 三.思考 l.如果需要将新结点 插入 到 第i个数据元素之后,算法将如何改动? 2. 双向链表和循环链表的定义和构造方法. //链表的 ...
- 线性表(单链表)实验
一.实验目的 1.线性表(LINE)的概念:数据元素之间存在着线性关系. 2.线性表的顺序表示和实现. 3.线性表的链式表示和实现. 4.线性表的基本操作:初始化.插入.修改.删除.遍历. 二.实验内 ...
- 理论基础 —— 线性表 —— 单链表
[实现类] 单链表的基本思想就是用指针表示结点之间的逻辑关系,因此要正确的对指针变量.指针.指针所指结点.结点的值进行区分. 设 p 是一个指针变量,则 p 的值是一个指针,若指针 p 指向某个 No ...
- 线性表详解(静态链表、单链表、双向链表、循环链表)
目录 申明 1. 线性表的定义 2. 线性表的抽象数据类型 3. 线性表的顺序存储结构 3. 1 顺序存储定义 3. 2 顺序存储方式 3. 3 数据长度与线性表长度区别 3. 4 地址计算方法 4. ...
最新文章
- pendo android,Pendo
- C/C++ 日期 时间 time_t与struct tm转换 收藏
- MySQL / 可重复读到底是怎么实现的?图解 ReadView 机制
- 五十五、深入插入排序和选择排序
- 扼杀 304,Cache-Control: immutable
- 消息队列控制灯代码_代码实现RabbitMQ死信队列的创建
- [转载] C++灵魂所在之---多态的前世与今生
- 编程语言python入门-为什么说python是适合新手入门的编程语言
- 关键字 : this /self / parent
- visual studio 2019 marketplace下载安装vsix插件
- 孔雀东南飞用mysql存储_孔雀东南飞的故事简介800字(孔雀东南飞主要内容介绍)...
- Tomcat虚拟主机配置示例
- AI初创公司新机遇,谷歌苹果竞相收购
- 如何让青少年远离“网络成瘾”?
- Latex 中导入visio画的图片,去除多余留白
- 猿辅导:一个班主任老师的影响力能有多大?
- 计算机网络协议分为哪几层?7层协议、5层协议、4层协议。
- Kafka集群的安全认证机构 SASL_SCRAM
- QT时间差计算的两种方法代码
- spark 安装单机版和集群