数据结构学习笔记② 线性表

本文深入探讨线性表的概念,包括顺序表和链表的特点及基本操作。解析链表的节点结构,详细介绍插入、删除、查找和修改元素的方法。同时,介绍了静态链表和循环链表的特性,以及双向链表的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线性表

2019.3.13
参考资料:数据结构与算法,解学武
个人记录重要的笔记,非全原创,有copy部分。

顺序表

不小心删了 有空再补

链表

  1. 链表中每个数据的存储都由数据域和指针域组成,即一个节点;

  2. 链表的节点可以分成头节点、首元节点、其他节点:
    · 头节点:其实就是一个不存任何数据的空节点,通常作为链表的第一个节点。对于链表来说,头节点不是必须的,它的作用只是为了方便解决某些实际问题;
    · 首元节点:由于头节点(也就是空节点)的缘故,链表中称第一个存有数据的节点为首元节点。首元节点只是对链表中第一个存有数据节点的一个称谓,没有实际意义;
    · 其他节点:链表中其他的节点;

  3. 建立链表的步骤

  • 声明一个头指针(如果有必要,可以声明一个头节点);
  • 创建多个存储数据的节点,在创建的过程中,要随时与其前驱节点建立逻辑关系;

链表的基本操作

插入元素
  1. 与顺序表相同,不论插入的位置在哪,操作思想都相同:
  • 将将要插入的元素的 next 指针指向插入位置后的结点;
  • 将插入位置对应的原始元素的前结点的 next 指针指向将插入的元素;
  1. ※重要!!!
    链表插入元素的操作必须是先步骤 1,再步骤 2;反之,若先执行步骤 2,会导致插入位置后续的部分链表丢失,无法再实现步骤 1。
删除元素

步骤

  • 将结点从链表中移出;(即frontnNode.next=delNode.next);
  • 手动释放掉结点(c语言中为free()函数),回收被结点占用的存储空间;
查找元素

步骤

  • 从表头依次遍历表中节点,用被查找元素与各节点数据域中存储的数据元素进行比对
  • 结束条件:比对成功 或 遍历至链表最末端,即node.next==null;
修改元素

步骤(删除的是我一开始的思路)

  • 遍历找到该元素
  • 新节点的下节点指向将被替换的元素的下节点
  • 将被替换节点的上节点指向新节点
  • 更新链表中的元素,只需通过遍历找到存储此元素的节点,对节点中的数据域做更改操作即可

顺序表和链表的优缺点

暂缺

静态链表

静态链表介绍

  1. 静态链表兼顾链表和顺序表的优点,数据全部存储在数组中(和顺序表一样),但存储位置是随机的
  2. 各个节点之间"一对一"的逻辑关系通过一个int数据(称为"游标",和指针功能类似)维持(类似链表的指针)。
  3. http://data.biancheng.net/view/163.html静态链表图示

备用链表

  1. 静态链表使用数组申请的物理空间中有两个链表,一条连接数据,另一条连接数组中未使用的空间(即备用链表)。
  2. 备用链表的作用是回收数组中未使用或之前使用过(目前未使用)的存储空间,留待后期使用。
  3. 通常,备用链表的表头位于数组下标为 0(a[0]) 的位置,而数据链表的表头位于数组下标为 1(a[1])的位置。
  4. 备用链表的作用:可以清楚地知道数组中是否有空闲位置,以便数据链表添加新数据时使用。若静态链表中数组下标为 0 的位置上存有数据,则证明数组已满。
静态链表的基本操作
					  !!!在进行以下操作之前都必须要先建立好静态链表!!!
添加元素

假设要被插入的位置为(逻辑上)第x个节点:

  • 遍历找到将要被插入的节点的位置
  • 摘除备用链表中的一个节点(这步不用实际操作)
  • x节点的上一个节点的游标(即x节点的数组下标)赋值给这个被取出来的备用节点(这一步就相当于间接摘除备用链表节点)
  • 新取出来的节点在数组中的下标赋值给x节点的上一个节点
删除元素
  • 遍历找到将要被删除的节点
  • 将存有目标元素的节点从数据链表中摘除
    x元素的游标赋值给上一个节点游标;
  • 将摘除节点添加到备用链表
    备用链表表头的上一个节点的游标指向刚被摘除的节点;
    x节点的游标指向备用链表表头;
查找元素

只能逐个遍历。

修改元素

遍历找到节点,修改数据域即可。

循环链表

  • 循环链表中,依然有头指针和首元节点等,只是尾部与头部相接。
  • 不要随意改变头指针的指向。

双向链表

略 与单向差距不大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值