线性表的链式存储结构
一、线性表的链式存储结构
1、定义
线性表的链式存储单元的特点是用一组任意的存储单元存储线性表的数据元素,我们除了要存储它的元素信息外,我们还要存储它们的后继元素的存储地址。
如上图所示,在我们的节点中分数据域和指针域,指针域中存放的便是下一个结点的地址,如上图存放的0500便是下一个结点的地址。
2、头指针or头节点
头指针
- 头指针是指链表指向的第一个节点的指针,若链表有头节点,则是指向头节点的指针
- 头指针有标志作用,一般用头指针冠以链表的名字。
- 不论链表是否为空,头指针均不为空。
头节点 - 头节点是为了操作的方便而设立的,数据域一般无意义。
- 有了头节点,对在第一元素节点前插入节点和删除节点等操作就统一了。
- 头节点不一定是链表必须要素。
二、单链表的读取
我们要获取第i个数据的算法思路,没办法一开始就知道,链表的查找比较麻烦。
- 声明一个节点p指向链表的第一个结点,初始化j从1开始;
- 当j<i时候,就遍历链表,让p的指针向后移,不断指向下一个节点,j累加。
- 若到链表末尾p为空,则说明第i个元素不存在;
- 否则查找成功,返回节点p的数据。
说白了,就是从头开始找,直到第 i 个元素为止,因为不知道要循环多少次,所以我们不能用for循环,核心思想还是指针后移。
三、单链表的插入与删除
1、插入
如上图图所示,单链表的插入,需要先断开上面两个节点关系,让 p 的指针域存放 e 的地址,然后把之前 p 的下一个节点的地址给e的指针域。插入后如图所示:
当然,表头和表尾的操作也是一样,表头的操作就是把新的表头的指针域里存放之前表头的地址,表尾增加则是把新表尾的地址放在之前表尾的指针域。
2、单链表的删除
单链表的删除操作,也就是把上图所示的ai节点删除,我们只需要把ai+1结点的地址交给ai-1的指针域即可。
我们可以明显看到看到,对于插入删除数据越频繁的操作,单链表的优势是十分的明显,他们的时间复杂度都是O(1)。
三、单链表的整表创建
1、头插法
创建单链表的过程就是一个动态生成链表的过程,单链表头插法的思路是:
5. 声明一个节点p和计数变量i;
6. 初始化一空链表L;
7. 让L的头节点的指针指向null,建立一个带头结点的单链表。
8. 循环:
①生成一新结点赋值给P;
②随机生成艺术字赋值给p的数据域;
③将p插入到头节点与前一新结点之间。
2、尾插法
尾插法即我们在标为添加,我们设 r 为指向尾结点的变量,r 会随着循环不断的变化结点,而L我们定义为整个单链表,我们把原先的 r 的指针域存放新的尾结点的地址,然后我们最后让 r 拿到新的尾结点的地址,这样就完成了尾插法。
四、单链表的整表删除
单链表的整表删除也是要一个一个来,不能直接删除,要把下一个结点的值拿到后再删除本结点,不然找不到下一个节点在哪。步骤:
- 声明节点p和q;
- 将第一个结点赋给p;
- 循环:先将下一个节点赋值给q,然后释放p,然后把q赋给p,如此循环。
线性表的链式存储结构相关推荐
- 数据结构和算法:(3)3.2线性表的链式存储结构
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素也就是说你这个可以放在A地点,这个可以放在E地点,A地点和E地点中间可以隔开一个C地点和D地点,这样是允许的),这组存储单元可以存在 ...
- 链表list(链式存储结构实现)_5 线性表的链式存储结构
系列文章参考资料为<大话数据结构>,源码为个人私有,未经允许不得转载 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,可以使连续的,也可以不连续,也就意味这些元素可以 ...
- 从零开始学数据结构和算法(二)线性表的链式存储结构
链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...
- 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)
线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...
- 数据结构开发(5):线性表的链式存储结构
0.目录 1.线性表的链式存储结构 2.单链表的具体实现 3.顺序表和单链表的对比分析 4.小结 1.线性表的链式存储结构 顺序存储结构线性表的最大问题是: 插入和删除需要移动大量的元素!如何解决? ...
- 线性表(链式存储结构)C语言
文章目录 一.线性表的链式存储结构 二.代码 1.头文件与宏定义: 2.对链表的定义及主要使用函数: 3.测试函数(主函数): 三.运行结果 一.线性表的链式存储结构 线性表的链式存储结构的特点是用一 ...
- Python 数据结构 之 线性表 的链式存储结构
用Python 来实现 C语言中 线性表的链式存储结构. 文章转载请注明: Python 数据结构 之 线性表 的链式存储结构 代码地址 https://github.com/WenkeZhou/P ...
- 【数据结构】CH2 线性表的链式存储结构
目录 一.链表概述 1.相关定义 二.单链表 1.插入和删除节点的操作 (1)插入结点 (2)删除结点 2.建立单链表 (1)头插法 (2)尾插法 3.线性表基本运算在单链表中的实现 (1)初始化线性 ...
- 线性表的链式存储结构以及单链表的插入和删除原理实现
线性表的链式存储结构 线性表中的每个元素最多只有一个前驱元素和一个后继元素(其逻辑结构),因此可以采用链式存储结构存储. 链表 线性表的链式存储结构称为链表.在链表中每个结点不仅包含有元素本身的信息( ...
最新文章
- 32岁前平凡无奇,鼓动同事创业,最终逆袭成硅谷首富
- MySQL之查看数据库编码
- GeoPandas 笔记: GeoDataFrame.plot()
- Java设计模式-观察者模式(订阅发布模式)
- Android-源码解析HandlerLooper
- MySQL与Python交互入门
- opencv-4.5.3 + opencv_contrib-4.5.3 + vtk-9.0.3编译(全流程)
- 协方差矩阵、相关矩阵、相关函数的联系与区别
- c语言输入一个数判断是否是同构数,c语言:编写函数判断x是否同构数
- PE文件格式系列译文之
- 2023 刷步数网站VUE源码
- Swift3 - String 字符串、Array 数组、Dictionary 字典的使用
- 华为推送服务 | 简单一招,提高用户活跃和留存
- 串灯控制盒去掉怎么接_彩灯控制器怎么接线
- 2021年全球强化采油表面活性剂收入大约202.3百万美元,预计2028年达到297.1百万美元
- 有限责任公司破产清算程序有哪些
- 光伏多峰最大功率点跟踪MPPT MATLAB/Simulink仿真模型
- 2022世界VR产业大会圆满收官,酷雷曼惊艳亮相!
- [附源码]java毕业设计宠物医院管理系统
- http(s)代理服务器与搭建