线性表的链式存储结构以及单链表的插入和删除原理实现
线性表的链式存储结构
线性表中的每个元素最多只有一个前驱元素和一个后继元素(其逻辑结构),因此可以采用链式存储结构存储。
链表
线性表的链式存储结构称为链表。在链表中每个结点不仅包含有元素本身的信息(称之为数据成员),而且包含有元素之间的逻辑关系的信息,即一个结点中包含有后继结点的地址信息或前驱结点的地址信息,我们把它称作指针成员。这样能够方便找到后继或前驱结点。
- 注:java语言中不存在指针的概念,我们描述只是为了方便,这里指针成员实际上是存放前驱或者后继结点的引用且链表不具有随机访问任一元素的特点。
- 如果每个结点只设置一个指向其后继结点的指针成员,这样的的链表我们称之为线性单向链表,简称单链表
- 如果每个结点中设置两个指针成员,分别指向于其前驱结点和后继结点,这样的链表成为线性双向链表,简称双链表。无前驱或后继结点的相应指针使用null表示。
为了便于在链表中的插入和删除结点,通常链表带有一个头结点,并通过头结点指针唯一标识该链表,因为从头指针所指的头结点出发,沿着结点的链可以访问到链表中的每个结点。如图:
通常将p指向的结点成为p结点或者结点p;头结点为head的链表称为head链表,头结点中不存放任何数据元素(空表是只包含头结点的链表),存放序号为0的元素的结点成为开始结点,存放终端元素的结点称为终端节点或尾节点,链长一般不计头结点。
单链表
LinkNode< E >泛型类的定义
- 代码示例:
class LinkNode<E> //单链表结点泛型类
{E data;LinkNode<E>next;public LinkNode(); //构造方法{next=null;}public LinkNode(E d) //重载构造方法{data=d;next=null;}
}
插入和删除操作
插入和删除是单链表中最常用的操作,它是建立单链表和相关基本运算算法的基础。
- 插入结点操作:插入运算是将结点s插入单链表中p结点的后面。为了插入结点s需要修改结点p中的指针成员,令其指向结点s,而结点s的指针成员应指向p结点的后继结点。关键代码如下:
s.next=p.next;p.next=s;
注:代码顺序不能颠倒
图解:
- 删除结点操作:删除运算时删除单链表中p结点的后继结点,其操作是将p结点的next运算修改为其后继结点的后继结点。代码描述如下
p.next=p.next.next;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nu9QfR5X-1667407574800)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ddc187e6f4c045d8b7d70d971dddb99e~tplv-k3u1fbpfcp-watermark.image?)]
头插法建立单链表
该方法从一个空表开始,依次读取数组a中的元素,生成新结点s,将读取的数据存放到新结点的数据成员中,然后将新结点s插入当前列表的表头上。一直重复这个过程,直到所有元素读完为止。
- 代码示例:
public void CreateListF(E[] a){LinkNode< E > s;
for (int i = 0; i < a.length; i++) { //循环建立数据结点ss=new LinkNode<E> (a[i]); //新建存放a[i]元素的结点s.next=head.next; //将s结点插入开始结点之前,头结点之后head.next=s;
}}
线性表的链式存储结构以及单链表的插入和删除原理实现相关推荐
- 2.3线性表的链式存储和运算—单链表应用举例
例2.5 已知单链表H,写一算法将其倒置.即实现如图2.22的操作.(a)为倒置前,(b)为倒置后. 算法思路:依次取原链表中的每个结点,将其作为第一个结点插入到新链表中去,指针p用来指向当前结点,p ...
- 数据结构开发(5):线性表的链式存储结构
0.目录 1.线性表的链式存储结构 2.单链表的具体实现 3.顺序表和单链表的对比分析 4.小结 1.线性表的链式存储结构 顺序存储结构线性表的最大问题是: 插入和删除需要移动大量的元素!如何解决? ...
- 这一篇让你弄懂线性表的链式存储结构
线性表的链式存储结构以及单链表概念 本篇内容是线性表链式存储结构的相关概念 这里有几篇线性表的干货供大家讨论学习: 这里是吐血总结的线性表顺序存储结构 这里是单链表的各种操作,超详细~ 双向链表.循环 ...
- 数据结构和算法:(3)3.2线性表的链式存储结构
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素也就是说你这个可以放在A地点,这个可以放在E地点,A地点和E地点中间可以隔开一个C地点和D地点,这样是允许的),这组存储单元可以存在 ...
- 链表list(链式存储结构实现)_5 线性表的链式存储结构
系列文章参考资料为<大话数据结构>,源码为个人私有,未经允许不得转载 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,可以使连续的,也可以不连续,也就意味这些元素可以 ...
- 从零开始学数据结构和算法(二)线性表的链式存储结构
链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...
- 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)
线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...
- 线性表(链式存储结构)C语言
文章目录 一.线性表的链式存储结构 二.代码 1.头文件与宏定义: 2.对链表的定义及主要使用函数: 3.测试函数(主函数): 三.运行结果 一.线性表的链式存储结构 线性表的链式存储结构的特点是用一 ...
最新文章
- oracle glogin.sql sql _user,为什么我的login.sql不执行?
- 反编译插件jadclips
- WPF窗体置于桌面最底层
- java数据类型划分_一张图搞定java数据类型的划分
- 简单的js文本框提示语
- springboot2.1.5集成finereport10.0过程中:手动安装本地jar包到maven仓库
- Jenkins忘记密码的修复方法(Windows/Linux)
- python市场需求如何_python市场需求量大吗
- 研发协同平台数据库死锁处理及改进
- 跟我学Shiro目录贴
- 什么是python全栈开发_什么是python全栈
- Num48 boss---02(pdm翻转,持久表现抽取,用户登退,消息提示,修密,自定义拦截器)...
- DataFrame 重新设置索引: reindex 和 reset_index 的区别
- Hibernate 主键
- 对抗生成网络学习(五)——infoGAN生成宽窄不一,高低各异的服装影像(tensorflow实现)
- Cocos Creator入门实战:桌球小游戏
- 3DMAX模型转换为gltf格式总结与问题汇总
- 宝洁网测管道题技巧_宝洁笔试网测小技巧分享
- linux 星际争霸,让星际争霸在Linux下转起来
- 为什么CMS两次标记时要 stop the world(阿里面试)
热门文章
- SQL多表查询:SQL JOIN连接查询各种用法总结
- 零起点Python大数据与量化交易
- Azure 深入浅出[3]: 如何在MS Visio里面画专业的Azure技术架构图?
- 小程序点餐系统功能,其一就是收付款完全无需人工
- php+server注册机制,ECMall的注册与登录机制
- css用flex实现字体垂直居中对齐
- 2021消防设施操作员(中级)岗位考试模拟题库防火门知识部分
- HTML中如何改变多选框的背景色,如何用css更改输入复选框的背景颜色?
- 3.1 Go语言中的函数与方法
- linux无法关闭防火墙设置,Linux关闭防火墙以及设置允许端口