【数据结构】21_线性表的链式存储结构

AI炼丹师
• 阅读 1918
顺序存储结构线性表的最大问题

插入和删除需要移动大量的元素!


链式存储的定义

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

【数据结构】21_线性表的链式存储结构

ai 和 ai+1 是线性表中的两个相邻数据元素;在物理内存中无相邻关系。

联系存储逻辑结构

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

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

【数据结构】21_线性表的链式存储结构

专业术语的统一

  • 顺序表

    • 基于顺序存储结构的线性表
  • 链表

    • 基于链式存储结构的线性表

      • 单链表:每个结点只包含直接后继的地址信息
      • 循环链表:单链表中的最后一个结点的直接后继为第一个结点
      • 双线链表:单链表中的结点包含直接前驱和后继的地址信息

不同类型的链表

单链表

【数据结构】21_线性表的链式存储结构

循环链表

【数据结构】21_线性表的链式存储结构

双线链表

【数据结构】21_线性表的链式存储结构

链表头中的基本概念

  • 头结点

    • 链表中的辅助结点,包含指向第一个数据元素的指针
  • 数据结点

    • 链表中代表数据元素的结点,表现形式为:[数据元素 | 地址]
  • 尾结点

    • 链表中的最后一个数据结点,包含的地址信息为空

单链表中的结点定义

【数据结构】21_线性表的链式存储结构

单链表的内部结构

【数据结构】21_线性表的链式存储结构

头结点在单链表的意义:

辅助数据元素的定位,方便插入和删除操作;因此,头结点不存储实际的数据元素

在目标位置插入数据元素

  1. 从头结点开始,通过 current 指针定位到目标位置
  2. 从堆空间申请新的 Node 结点
  3. 执行操作:
node->value   = e;
node->next    = current->next;
current->next = node;

【数据结构】21_线性表的链式存储结构

【数据结构】21_线性表的链式存储结构

在目标位置删除数据元素

  1. 从头结点开始,通过 current 指针定位到目标位置
  2. 使用 toDel 指针指向需要删除的结点
  3. 执行操作:
toDel = current->next;
current->next = toDel->next;
delete toDel;

【数据结构】21_线性表的链式存储结构

小结

  • 链表中的数据元素在物理内存中无相邻关系
  • 链表中的结点都包含数据域和指针域
  • 头结点用于辅助数据元素的定位,方便插入和删除操作
  • 插入和删除操作需要保证链表的完成性

以上内容整理于狄泰软件学院系列课程,请大家保护原创!

点赞
收藏
评论区
推荐文章
22 22
4年前
【数据结构之链表】看完这篇文章我终于搞懂链表了
一览:本文从零介绍链式存储结构的线性表——单链表。包括以下内容:什么是链式存储存储结构?单链表的结构辨析头结点、头指针等易混淆概念基本的增删改查操作(不带头结点和带头结点)单链表与顺序表的对比线性表的链式存储结构在一文中我们介绍了一种“用曲线连接”的线性表,“曲线”是一种形象化的语言,实际上并不会存在所谓“曲线”的这种东西。所谓“曲线连
22 22
4年前
【数据结构之链表】详细图文教你花样玩链表
【系列文章推荐阅读】0.提要钩玄文章已经介绍了链式存储结构,介绍了链式存储结构的最基本(简单)实现——单向链表。单向链表,顾名思义,它是单向的。因为单链表的每个结点只有一个数据域和一个指针域,而该指针域只存储了下一个结点的地址,所以我们只能通过某结点找到其直接后继结点,却不能通过某节点找到其直接前驱结点。此外,由于单链表到尾结点(链表的最后一
Wesley13 Wesley13
3年前
java中Arraylist和LinkList的区别
   1、Arraylist使用数组方式存储,允许直接按照序号索引元素。但是插入元素或者删除元素需要移动等内存操作。所以查询速度快而插入数据慢。   2、Linklist是双向列表方式存储,按照序号索引向前或者向后遍历。但是插入数据时候只要记录前后项,所以插入数据速度快但是查询慢。ArrayList和LinkList在性能上各有优缺点,但
似梦清欢 似梦清欢
2年前
线性表
线性表的顺序存储实现(数组形式)称为顺序表。线性表顺序表示原理解析这里描述的线性表是逻辑结构的,独立于存储结构。线性表的顺序表示简称顺序表。顺序表实现线性表的方式是使用数组。线性表第一个元素的数组下标是0。另外一种实现顺序表的方法:使用数组方式比动态分配更
Souleigh ✨ Souleigh ✨
4年前
JS 实现单链表
要存储多个元素,数组(或列表)可能是最常用的数据结构。但这种数据结构有一个缺点:(在大多数语言中)数据的大小是固定的,从数组的起点或中间插入或移除项的成本很高。  链表存储有序的集合,但不同于数组,链表中的元素在内存中并不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。  相对于传统的数组,链表的一个好处是
Wesley13 Wesley13
3年前
Java实现顺序栈
一、分析  栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表。  顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。  一个标准的顺序栈
Wesley13 Wesley13
3年前
Vector, ArrayList, LinkedList 区别与用法
ArrayList和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,
Stella981 Stella981
3年前
Collection 的两个子集Set 和 List
CollectionList(列表)特点:1,有序(存储元素的顺序和取出元素的顺序一致)2,该集合中的元素都有索引,所以可以通过索引(角标)来访问元素。3,它可以存储重复元素。常见子类对象:记住:具体的子类对象,我们要学习应该是该对象的特有的数据结构,以及相关的特点。Vector:jdk1.0
Wesley13 Wesley13
3年前
D1
1\.数据结构  1.1线性结构  (1)最常用的数据结构,特点是数据元素之间存在一对一的线性关系  (2)有两种不同的存储结构,即顺序存储结构和链式存储结构    顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的    链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
Wesley13 Wesley13
3年前
C++ 顺序表 代码实现
线性表存储在计算机中可以采用多种方式,以下是按照顺序存储方式实现:优点:查找很方便缺点:插入元素、删除元素比较麻烦,时间复杂度O(n)1ifndefSeqList_h2defineSeqList_h3include<iostream4usingnamespacestd;
菜园前端 菜园前端
2年前
什么是字典?
原文链接:什么是字典?与集合类似,字典也是一种存储唯一值的数据结构,但它是以键值对的形式来存储。在ES6中新增了Map字典。实现功能delete删除元素clear清空所有元素set添加/覆盖元素get查找/返回元素的值has判断是否包含某个元素应用场景1.
AI炼丹师
AI炼丹师
Lv1
爱与被爱同时发生才是值得炫耀的事。
文章
4
粉丝
0
获赞
0