链表

数据结构----链表

1.概念

由一组不必相连的内存结构(节点),按特定的顺序链接在一起的抽象数据类型。

1.1抽象数据类型

表示数据中抽象出来的一些操作的集合,即对象。

1.2内存结构

内存中的结构。

1.3数组和链表的区别和优缺点

1.3.1区别
数组
数组是一种连续存储线性结构,元素类型相同,大小相等。
链表
链表是离散存储线性结构,n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。
1.3.2优缺点
数组
数组优点:
	存取速度块
数组缺点:
	1.事先必须知道数组的长度
	2.插入删除元素很慢,效率低
	3.空间通常是有限制的,需要大块连续的内存块
链表
优点:
1.空间没有限制
2.插入删除元素很快
缺点:
存取速度很慢

1.4分类

1.4.1单链表
1.4.1.1 概念
由各个内存结构通过一个Next指针链接在一起组成,每一个内存结构都存在后继内存结构(链尾除外),内存结构有数据域和Next指针域组成。
1.4.1.2 分析
Data数据+Next指针,组成一个单链表的内存结构,第一个内存结构称为链头,最后一个内存结构称为链尾;
链尾的Next指针设置为NULL(指向空);
单链表的遍历方向单一(只能从链头遍历到链尾)
1.4.1.3 链表操作集
1.插入
1.创建Temp指针,(利用Data)遍历单链表,找到要插入的节点,在它的后面插入新节点。
2.用新节点new的Next保存Temp的Next指针,即new指向Temp的下一个节点。
3.再把Temp的Next指针,指向new节点。
2.删除
1.创建Temp指针,(利用Data)遍历单链表,找到要删除节点的前一个节点。
2.先创建删除指针保存temp的next,再用temp的next保存删除的next指针,即temp指向了删除节点的下一个节点。
3,释放要删除节点的内存,完成操作。
1.4.2双向链表
1.4.2.1 概念
由各个内存结构通过指针 Next 和指针 Prev 链接在一起组成,每一个内存结构都存在前驱内存结构和后继内存结构(链头没有前驱,链尾没有后继),内存结构由数据域、Prev 指针域和 Next 指针域组成。
1.4.2.2 分析
Data 数据 + Next 指针 + Prev 指针,组成一个双向链表的内存结构;第一个内存结构称为 链头,最后一个内存结构称为 链尾;链头的 Prev 指针设置为 NULL, 链尾的 Next 指针设置为 NULL;Prev 指向的内存结构称为 前驱, Next 指向的内存结构称为 后继;双向链表的遍历是双向的,即如果把从链头的 Next 一直到链尾的[NULL] 遍历方向定义为正向,那么从链尾的 Prev 一直到链头 [NULL]遍历方向就是反向;
1.4.2.3 链表操作集
1.插入
1.创建Temp指针,(利用Data)遍历双向链表,找到要插入位置的前一个节点。
2.先用新节点new的Prev保存Temp,再用new的next保存Temp的next指针,即new的prev指向Temp,new的next指向Temp的next。
2.删除
1.创建Temp指针,(利用Data)遍历双向链表,找到要删除的节点。
2.用Temp的前驱结点的next保存成Temp的next,再把Temp的后继节点的Prev保存成Temp的Prev。
3.释放已删除的节点的内存。
1.4.3循环链表
1.4.3.1分类
1.单向循环链表
由各个内存结构通过一个指针next链接在一起组成,每一个内存结构都存在后继内存结构,内存结构由数据域和next指针域组成。
2.双向循环链表
由各个内存结构通过指针next和指针Prev链接在一起组成,每一个内存结构都存在前驱内存结构和后继内存结构,内存结构由数据域、Prev指针域和next指针域组成。
1.4.3.2操作集
1.单向链表插入
1.创建Temp指针,(利用Data)遍历单向循环链表,找到要插入位置的前一个节点。
2.用新节点new的next保存Temp的next指针,即new指向了Temp的下一个节点,再把Temp的next指针,指向new节点。
2.单向链表删除
1.创建Temp指针,(利用Data)遍历单向循环链表,找到要删除节点的前一个节点。
2.先创建IDelete指针保存Temp的next,再用Temp的next保存IDelete的next指针,即Temp指向了IDelete的下一个节点,释放IDelete指向的节点内存。
3.双向链表插入
1.创建Temp指针,(利用Data)遍历双向循环链表,找到要插入位置的前一个节点。
2.先用New的Prev保存Temp,再用New的next保存Temp的next指针,用Temp的next的Prev保存New,再用Temp的Next保存New。

4.双向链表删除

1.创建Temp指针,(利用Data)遍历双向循环链表,找到要删除的节点。
2.用Temp的Prev的Next保存成Temp的Prev,释放IDelete指向的节点内存。

结语:第一次写博文,即是分享,也是自己的积累,有纰漏的地方,欢迎大佬指导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值