1、问题引入

开发数组类模板的原因在于:在创建基于顺序存储结构的线性表时,发现这样的线性表可能被误用,因为重载了数组访问操作符,使用时跟数组类似,但是线性表和数组有很大的区别,所以激发了新的需求:开发数组类替换C++原生数组类,因为原生数组类也存在着很大缺陷,使用不方便。

基于顺序存储结构的线性表的另一个缺点:插入或删除元素时,涉及到大量数据元素的移动,对于效率的影响非常大

一个新的需求:在插入或删除元素时不需要大量移动数据元素的一种数据结构,即基于链式存储结构的线性表

2、链式结构的定义

为了表示每个数据元素于其直接后继元素之间的逻辑关系;数据元素除了存储本身的信息外,还需要存储其直接后继的信息。

\(a_i\)和\(a_{i+1}\)是线性表中的两个相邻数据元素,在物理内存中无相邻关系。

一个数据元素包含了两部分:\(a_i\)是数据元素本身的数据信息,还有一个地址信息,地址是第\(i\)个元素的直接后继,即第\(i+1\)个的元素在内存中的地址信息。换句话说就是如果找到了第\(i\)个元素,不仅可以得到第\(i\)个元素的本身的值之外,还可以得到第\(i+1\)个元素在内存中的位置

3、链式存储逻辑结构

基于链式存储结构的线性表中,每个结点都包含数据域和指针域

  • 数据域:存储数据元素本身
  • 指针域:存储相邻结点的地址

两种线性表名称统一:

  • 顺序表:基于顺序存储结构的线性表
  • 链表:基于链式存储结构的线性表
    • 单链表:每个结点只包含直接后继的地址信息
    • 循环链表:单链表的最后一个结点的直接后继为第一个结点
    • 双向链表:单链表中的结点包含直接前驱和后继的地址信息
    • 双向循环链表......

4、链表中的基本概念

  • 头结点:链表中的辅助结点,包含指向第一个数据元素的指针;不包含任何数据信息,是为了简化代码进行辅助
  • 数据结点:链表中代表数据元素的结点,表现形式为:(数据元素,地址)
  • 尾结点:链表中的最后一个数据结点。单独放出的原因:尾结点包含的地址信息直接决定了链表的性质,地址信息为空,就是单链表;地址为第0个元素的地址信息,就是循环链表;地址信息为随机值,就是一个非法链表

5、单链表

5.1 单链表中的结点定义

// 用struct定义类,默认属性是public
// T是泛指类型,链表可以存储各种类型的数据
struct Node : public Object
{T value;Node* next; // 指向后继结点的指针
}

5.2 单链表的内部结构

头结点在单链表中的意义是:辅助数据元素的定位,方便插入和删除操作,因此,头结点不存储实际的数据元素。

5.3 在目标位置处插入数据元素

  1. 从头结点开始,通过current指针定位到目标位置

  2. 从堆空间申请新的Node结点

  3. 执行操作

    node->value = e;
    node->next = current->next;
    current->next - node;

5.4 在目标位置删除数据元素

  1. 从头结点开始,通过previous指针定位到目标位置的前一个地址

  2. 使用toDel指针指向需要删除的结点

  3. 执行操作:

    toDel = previous->next;
    previous->next = toDel->next;
    delete toDel;

6、小结

链表中的数据元素在物理内存中无相邻关系

链表中的结点都包含数据域和指针域

头结点用于辅助数据元素定位,方便插入和删除操作

插入和删除操作需要保证链表的完整性

转载于:https://www.cnblogs.com/chenke1731/p/9495573.html

七、线性表的链式存储结构相关推荐

  1. 数据结构和算法:(3)3.2线性表的链式存储结构

    线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素也就是说你这个可以放在A地点,这个可以放在E地点,A地点和E地点中间可以隔开一个C地点和D地点,这样是允许的),这组存储单元可以存在 ...

  2. 链表list(链式存储结构实现)_5 线性表的链式存储结构

    系列文章参考资料为<大话数据结构>,源码为个人私有,未经允许不得转载 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,可以使连续的,也可以不连续,也就意味这些元素可以 ...

  3. 从零开始学数据结构和算法(二)线性表的链式存储结构

    链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...

  4. 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)

    线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...

  5. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

  6. 数据结构开发(5):线性表的链式存储结构

    0.目录 1.线性表的链式存储结构 2.单链表的具体实现 3.顺序表和单链表的对比分析 4.小结 1.线性表的链式存储结构 顺序存储结构线性表的最大问题是: 插入和删除需要移动大量的元素!如何解决? ...

  7. 线性表(链式存储结构)C语言

    文章目录 一.线性表的链式存储结构 二.代码 1.头文件与宏定义: 2.对链表的定义及主要使用函数: 3.测试函数(主函数): 三.运行结果 一.线性表的链式存储结构 线性表的链式存储结构的特点是用一 ...

  8. Python 数据结构 之 线性表 的链式存储结构

    用Python 来实现 C语言中 线性表的链式存储结构. 文章转载请注明:  Python 数据结构 之 线性表 的链式存储结构 代码地址 https://github.com/WenkeZhou/P ...

  9. 【数据结构】CH2 线性表的链式存储结构

    目录 一.链表概述 1.相关定义 二.单链表 1.插入和删除节点的操作 (1)插入结点 (2)删除结点 2.建立单链表 (1)头插法 (2)尾插法 3.线性表基本运算在单链表中的实现 (1)初始化线性 ...

  10. 线性表的链式存储结构以及单链表的插入和删除原理实现

    线性表的链式存储结构 线性表中的每个元素最多只有一个前驱元素和一个后继元素(其逻辑结构),因此可以采用链式存储结构存储. 链表 线性表的链式存储结构称为链表.在链表中每个结点不仅包含有元素本身的信息( ...

最新文章

  1. 微型计算机实验代码,上师大,微型计算机实验全代码.doc
  2. 给用户增加SAP_ALL权限
  3. SonarQube6.2源码解析(三)
  4. Python -- 常见错误解决方法记录
  5. 5G iPhone若推迟至10月发布 将会拉低苹果两个财季营收
  6. 微课|中学生可以这样学Python(8.3节):递推算法例题讲解
  7. freecplus框架,Linux平台下C/C++程序员提高开发效率的利器
  8. 《算法导论》第三版第4章 分治策略 练习思考题 个人答案
  9. SaaS vs 低代码,谁在成为中国产业服务的楔子?
  10. 计算机视觉之YOLO算法
  11. 华为OD机试(JAVA)真题II
  12. Android 判断当前身份证格式是否正确
  13. JZOJ3457. 【NOIP2013模拟联考3】沙耶的玩偶(doll) (2017.8B组)
  14. 2018-2019-2 20189206 《网络攻防实践》 第二周作业
  15. ReadHub源码阅读笔记(一)
  16. python爬取头条付费专栏视频_Python3从零开始爬取今日头条的新闻【五、解析头条视频真实播放地址并自动下载】...
  17. meego linux版本,记MeeGo的多系统启动
  18. 在STM32中:CAN总线驱动
  19. 微信小游戏个人游戏发布《自省自查报告》
  20. 五种不同风格的Photoshop特效字体

热门文章

  1. Proteus仿真单片机:51单片机的仿真
  2. Python对Protobuf进行序列化与反序列化
  3. Javascript JSON格式
  4. 本地套接字示例[来源:Advanced Linux Programming]
  5. js_组合继承(最常用的继承方式)
  6. 接口报Provisional headers are shown原因和解决方法
  7. div 背景图 居中
  8. [react] shouldComponentUpdate方法是做什么的
  9. Taro+react开发(19)--arr声明const报错
  10. 前端学习(3033):vue+element今日头条管理-反馈