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

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

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


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


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


顺序表:

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


单链表:

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


二、二者的比较


1.基于空间的比较


(1)存储分配的方式:


从二者的定义我们能看出来,

顺序表是地址连续存储,并且具有固定的空间大小,是静态存储;

而单链表存储地址可以不连续,没有固定空间,需要添加数据时可通过尾部指针指向所要添加存储数据的空间即可,是动态存储。


这里我们加一个存储密度的概念:

存储密度 = 结点数据本身所占的存储量/结点结构所占的存储总量


显然我们可以得出这样的结果:

顺序表的存储密度 = 1

链表的存储密度 < 1(链表中指针也占用存储量,但指针不是数据)


(2)空间的利用率:


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


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


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


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


2.基于时间的比较


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


20190316164741339.png


顺序表平均需要移动近一半元素

链表不需要移动元素,只需要修改指针


三、总结


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


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


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

目录
相关文章
|
2月前
|
存储 编译器 C语言
数据结构-顺序表详解(看这篇就足够了,哈哈哈)
数据结构-顺序表详解(看这篇就足够了,哈哈哈)
59 2
|
1月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
1月前
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
71 3
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
2月前
|
存储
[数据结构] -- 单链表
[数据结构] -- 单链表
26 1
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
存储
数据结构(单链表)
数据结构(单链表)
20 0
|
2月前
|
存储
数据结构(顺序表)
数据结构(顺序表)
29 0
|
2月前
|
存储 算法
【数据结构】新篇章 -- 顺序表
【数据结构】新篇章 -- 顺序表
17 0
|
2月前
|
存储 测试技术
探索数据结构:顺序表的实现与应用
探索数据结构:顺序表的实现与应用