数据结构:线性表中顺序表和单链表的比较

看到一道选择题是线性表中顺序表与单链表的区别对比,感觉对于这二者的区别了解不是很全面,决定来一波总结。至于什么是线性表,可以参考该博客

线性表中顺序表和单链表的比较

一、什么是顺序表和单链表

顺序表:
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。

单链表:
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。它的数据以结点来表示,每个结点包括数据和指针


二、二者的比较

1.基于空间的比较

(1)存储分配的方式:

从二者的定义我们能看出来,
顺序表是地址连续存储,并且具有固定的空间大小,是静态存储;
而单链表存储地址可以不连续,没有固定空间,需要添加数据时可通过尾部指针指向所要添加存储数据的空间即可,是动态存储。

这里我们加一个存储密度的概念:
存储密度 = 结点数据本身所占的存储量/结点结构所占的存储总量

显然我们可以得出这样的结果:
顺序表的存储密度 = 1
链表的存储密度 < 1(链表中指针也占用存储量,但指针不是数据)

(2)空间的利用率:

对于未知数量的数据存储,用单链表较好,每需要存储一个数据,就会开辟一个空间,即使有指针占据空间,所产生的浪费也比顺序表对于未知数量数据开辟较大空间的浪费少。

对于已知存储数据量来说,顺序表开辟对应的空间大小,来存储数据,因为顺序表存储密度为 1,就完全没有浪费的空间,而单链表就会造成空间浪费。而且编译器在进行内存分配时,由于单链表是随机开辟空间存储,这样容易在磁盘产生碎片空间,造成更大的空间浪费。

(3)对CPU高速缓存的影响:

因为顺序表存储地址连续,一次性会开辟存储多个元素的空间,所以在使用顺序表时,可以一次把多个数据写入高速缓存,再写入主存,顺序表的CPU高速缓存效率更高,且CPU流水线也不会总是被打断;而单链表是每需要存储一个数据开辟一次空间,所以每个数据存储时都要单独的写入高速缓存区,再写入主存,这样就造成了,单链表CPU高速缓存效率低,且CPU流水线会经常被打断。

2.基于时间的比较

通常我们比较时间就是针对其时间复杂度进行比较,由于我之前的博客:数据结构 : 数组 / 链表 / 二叉排序树增删改查的时间复杂度解析对于该部分有详细的概述,这里就补在阐述了,可以直接看得出的总结图
在这里插入图片描述

顺序表平均需要移动近一半元素
链表不需要移动元素,只需要修改指针


三、总结

使用顺序表和链表都必须满足每个元素占有相同大小的内存空间,并且这个大小是固定的。

一般来说线性表(顺序表和单链表都属于线性表)的插入删除操作会被执行的频繁一些,因此,使用单链表的频率较大。

在查询操作使用的比较频繁时,使用顺序表会好一些;在插入、删除操作使用的比较频繁时,使用单链表会好一些。

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
线性表是一种常见的数据结构,它是由一组具有相同数据类型的元素组成的序列。线性表的元素之间存在一对一的关系,即每个元素都有一个前驱元素和一个后继元素,除了第一个元素没有前驱元素,最后一个元素没有后继元素。 线性表的常见操作包括插入、删除、查找和修改等。下面是一些关键的知识点: 1. 顺序存储结构:线性表的顺序存储结构是使用数组来实现的,元素在内存是连续存储的。通过下标可以直接访问元素,插入和删除操作需要移动其他元素。 2. 链式存储结构:线性表的链式存储结构是使用链表来实现的,每个节点包含数据和指向下一个节点的指针。插入和删除操作只需要修改指针,不需要移动其他节点。 3. 单链表:每个节点只包含一个指向下一个节点的指针。 4. 双链表:每个节点包含一个指向前一个节点和一个指向后一个节点的指针。 5. 循环链表:尾节点指向头节点,形成一个循环。 6. 静态链表:使用数组来实现链表,通过游标来表示指针。 7. 线性表的基本操作: - 初始化:创建一个空的线性表。 - 插入:在指定位置插入一个元素。 - 删除:删除指定位置的元素。 - 查找:根据元素的值或位置查找元素。 - 修改:修改指定位置的元素。 - 遍历:依次访问线性表的每个元素。 8. 线性表的应用:线性表是其他数据结构的基础,常用于实现栈、队列、数组等数据结构

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲲志说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值