408考研笔记之数据结构(三):线性表之链式存储

本文仅为复习时所记笔记,如有错误与不足还请指正。

  1. 线性表的定义:见上一篇文章:https://blog.csdn.net/qq_38652677/article/details/105330487?utm_source=app

  2. 线性表的链式存储又称为单链表,每个结点除了存放数据元素外,还存放指向下一个结点的指针。所以,链式存储并不要求大片连续的存储空间,所以改变容量十分方便,但因为还要存放指向下一结点的指针,所以空间利用率没有顺序表高,且不能随机存取(因为每个结点都存有指向下个节点的指针,所以如果要找到这个结点需要通过依次遍历前面的每一个结点才能找到这个结点)。

  3. 通常使用头指针来定义一个单链表,如果头指针为NULL则为空表。同时,为了操作方便常常在单链表第一个结点前附加一个结点,称为头结点,头节点内通常不存储信息(但也可用来记录表长等信息),头节点的指针域指向第一个元素结点。头指针始终指向链表的第一个结点。

  4. 单链表的基本操作
    ①定义
    在这里插入图片描述
    ②初始化单链表
    不带头结点在这里插入图片描述
    带头节点在这里插入图片描述
    ③判断单链表是否为空
    不带头结点
    在这里插入图片描述
    带头节结点
    在这里插入图片描述
    ④按位序插入
    不带头节点不带头结点
    带头结点在这里插入图片描述
    ⑤按位序删除
    思路:找到第i-1个结点,将其指针指向第i+1个结点,并释放第i个结点。
    在这里插入图片描述
    删除指定结点【但这种方法没有考虑p刚好时是最后一个指针的情况】在这里插入图片描述
    ⑥查找
    按值查找在这里插入图片描述
    按位查找
    在这里插入图片描述
    ⑦求表的长度在这里插入图片描述

  5. 双链表
    双链表指针中仅有一个指向其后继的指针,从而使得只能从头向尾的依次进行遍历,要访问某个结点的前驱结点的前驱结点也只能从头进行遍历,非常不方便,从而引入了双链表的概念,双链表中有两个指针prior和next,分别指向其前驱和后继结点。

  6. 双链表的基本操作
    ①定义
    在这里插入图片描述
    ②初始化
    在这里插入图片描述
    ③插入
    在这里插入图片描述
    ④删除
    在这里插入图片描述
    ⑤销毁(双链表的销毁就是n次双链表的删除某一个结点)在这里插入图片描述
    ⑥遍历
    在这里插入图片描述
    链表不能随机存取,按位查找、按值查找都只能通过遍历来实现。时间复杂度位O(1)。

  7. 循环链表
    ①循环单链表
    在这里插入图片描述
    ②循环双链表
    在这里插入图片描述

  8. 静态链表:分配一块连续的存储空间,各个结点集中安置。(单链表:各个结点在内存中星罗棋布)。静态链表是借助数组来描述线性表的链式存储结构,结点有数据域和指针域,其中指针域是结点的相对地址(数组下标),通常也称为游标,这里的地址是下一个元素的。优点是增加删除操作不用大量移动的元素。缺点是不能随机存取,只能从头结点依次往后查找。静态链表容量固定不变。
    在这里插入图片描述

  9. 总结
    顺序表和链表各有优缺点,不能单说哪一种好哪一种不好,以下从三个方面来评价。
    ①逻辑结构
    都是线性表,都是线性结构。
    ②存储结构
    顺序表支持随机存取,存储密度高,但大片连续的存储空间分配不方便。
    链表离散的小空间分配方便,且改变容量方便,但不可随机存取,存储密度低(结点内还存有指针)。
    ③基本操作
    a.创建
    顺序表需预先分配大片连续空间(若空间过小,不可扩展,若空间过大,又可能造成浪费。)。
    链表只用分配一个头结点(也可 不要头结点,只声明头指针)方便扩展。
    b.销毁
    顺序表:令length==0(静态分配系统会自动回收,动态分配需手动,用free()释放空间)。
    链表:free()
    c.增加/删除
    顺序表:元素需要后移/前移。(时间复杂度为O(n))
    链表:只需修改指针。(时间复杂度为O(n),主要是查找所消耗)
    d.查找
    顺序表:按位(时间复杂度O(1),体现随机存取的特点)
    按值(时间复杂度O(n))
    链表:按位(时间复杂度O(n)
    按值(时间复杂度O(n))
    本章内容较多,且为考试重点章节,一定要理解原理,切不可死记硬背。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值