ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

脚踏实地《数据结构第二章》第七节:顺序表和链表的比较

2022-03-20 17:58:45  阅读:114  来源: 互联网

标签:存储 顺序 元素 结点 链表 查找 第七节 数据结构


一:逻辑结构(对比)

都属于线性表,都是线性结构

二:物理结构/存储结构(对比)

2.1 顺序表

在这里插入图片描述

存储结构:顺序存储

  1. 拥有随机存储的特性
  2. 其各个结点只需要存储数据元素本身,不需要存储其他的冗余信息,存储密度高
  3. 顺序存储的这个结构要求系统给其分配一整片连续的存储空间,所以大片连续空间分配不方便,改变容量不方便

2.2 链表

在这里插入图片描述

存储结构:链式存储

  1. 各个结点可以离散存储在不同的空间当中,且存储空间不要求连续,所以离散的小空间分配方便(malloc函数),改变容量方便
  2. 当我们想要知道第i个结点时,我们只能从第一个结点(表头)依次往后寻找,此外还需要花费一定的空间存储指针,所以不可随机存取,存储密度低

三:数据的运算/基本操作(对比)

考研重点是:创建、增、删、查,销毁和改考的比较少

3.1 创建(初始化)

在这里插入图片描述

3.1.1 顺序表

需要预分配大片连续空间

  1. 若分配空间过小,则之后不方便拓展容量;
  2. 若分配空间过大,则浪费内存资源

如果采用静态分配的方式实现的话,顺序表的容量是不可更改

如果采用动态分配的方式实现的话,容量可改变,但需要移动大量元素,时间代价高

3.1.2 链表

只需分配一个头结点(也可以不要头结点,只声明一个头指针),之后方便拓展(弹性和灵活性比顺序表更胜一筹)

每次需要扩展的时候,只需要申请一小片新的空间,如何通过指针的方式将其连接到头节点(头指针)上就可以了

3.2 销毁

在这里插入图片描述

3.2.1 顺序表

就其length的值修改为0,但是顺序表占用的空间回收分为下面的两种情况

  1. 静态分配实现的顺序表:当定义的静态数组的生命周期结束之后,系统会自动的回收空间
  2. 动态分配实现的顺序表:需要手动free(malloc和free必须是成对出现的

3.2.2 链表

链表的销毁就是将链表的结点依次消除(free函数)

3.3 增删

在这里插入图片描述

3.3.1 顺序表

顺序存储的存储结构要求数据元素在内存里是相邻的、有序的;所以插入/删除元素要将后续元素都后移/前移

时间复杂度O(n);时间开销主要来自移动元素

若数据元素很大,则移动的时间代价很高

3.3.2 链表

插入/删除元素只需修改指针即可

时间复杂度O(n);时间开销主要来自查找目标元素

查找元素的时间代价更低

在这里插入图片描述

3.4 查

3.4.1 顺序表

按位查找:时间复杂度为O(1)

按值查找:时间复杂度为O(n);若表内元素有序,可在O(log2n)时间内找到

3.3.2 链表

按位查找(只能从第一个元素依次往后查找):时间复杂度为O(n)

按值查找:时间复杂度为O(n);无论是否有序都是O(n)

四:如何选择

表长难以预估、经常要增加/删除元素――链表

表长可预估、查询(搜索)操作较多――顺序表

五:知识回顾与重要考点

开放式问题答题思路:(如下例)

实现线性表时,用顺序表还是链表好?(6分)

  1. 顺序表和链表的逻辑结构都是线性结构,都属于线性表。
  2. 但是二者的存储结构不同,顺序表采用顺序存储…(特点,带来的优点缺点);链表采用链式存储… (特点、导致的优缺点)。
  3. 由于采用不同的存储方式实现,因此基本操作的实现效率也不同。当初始化.时…;当插入一个数据元素时…;当删除一个数据元素时…;当查找一个数据元素时…

标签:存储,顺序,元素,结点,链表,查找,第七节,数据结构
来源: https://blog.csdn.net/yyuggjggg/article/details/122589310

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有