链表和线性表的优缺点

链表和线性表的优缺点

作为我们最先接触的两个数据结构,链表和线性表的优缺点都较为明显,并且二者互相补足

线性表

线性表的组成

首先,我们来谈谈线性表SeqList
线性表 (linear list) 是 数据结构 的一种,一个线性表是n个具有相同特性的数据元素的有限序列。类似于数组,其本质是一块连续的地址空间

图片来自百度
在这里插入图片描述
因为其内容包含多个变量,所以C语言使用结构体来构造
共三个变量:
1.所存储数据类型的指针,用来接收之后malloc,动态开辟的空间
2.Size,表示当前线性表所存储元素个数
3.Capacity,表示当前线性表所能存储的最大元素个数

详细的实现这里就不赘述了

接下来是就来讲解线性表的缺点

线性表的缺点

如线性表的本质所表现的,线性表是一块连续的空间,如同数组一样,我们需要手动开辟,而且需要指定大小的开辟。
那么就出现第一个问题,开辟多大的空间呢?
这只是问题的表层,很多人也知道,即使我们开辟的过大,过小,我们都可以通过realloc,重新开辟空间,并且realloc可以帮我们copy原先的数据.
但这又有个问题,realloc多大呢,我们总不能插入一个数据,就重新realloc一块比原先空间多一的空间吧?比较适合的扩大数目是—原先的两倍。
但这样也会在后来造成内存浪费,比如我要存130,原先100,那就要realloc200的空间,70个空间将造成浪费
所以,线性表的第一个缺点:容易造成空间浪费
PS:realloc会考察原先空间后是否有足够的空间,若有,是原地扩容。
若没有足够空间,则会在别处申请一块空间,并拷贝原先的值
第二个缺点:头部中间插入和删除效率低
当我们要在线性表的头部或中间插入和删除元素时,我们需要将位置后的元素,往后移动,这就导致效率低

但是,线性表也并不是一无是处

线性表的优点

同样,因为线性表的本质,是一块连续的空间
线性表可以通过下标访问元素,很多算法是需要兼容这一点的,比如快排和二分查找

链表

链表和线性表有很大不同
最明显的还是数据的存储,链表并不是连续的地址空间,他是无序的,散的,但这并不违反其线性结构,因为其组成有指针指向当前链表的下一个节点,实现数据的线性联系

链表的组成

链表内部主要有三大区分
循环 非循环
带哨兵卫的头 不带头
单向 双向

因此,链表有八种类型
其中单向,不带头,非循环链表是oj题最常见的,因为其结构简单,功能少,所以相应的题考验学生的思维能力。
而双向,带头,循环链表是结构最复杂,全面的链表,所以其功能较为强大
此处举例双向,带头,循环链表

图片来自百度
在这里插入图片描述

链表的优点

任意位置插入删除效率高
因为链表并不是连续的空间,插入和删除只要对指定位置的前后做操作就好
并且通过封装的FindList函数,O(N)的查找,再在指定位置插入删除O(N)即可
按需申请释放空间
每一次的插入删除,只需要申请一块空间即可,和原本的空间没有影响
实际操作,链表会更为的舒服

但链表的缺点也很明显

链表的缺点

不支持随机访问。(用下标访问)
意味着,一些排序,二分查找,等算法在这种结构不适用

总结

大致的线性表和链表的总结就到这。
一句话,数据结构是数据存储,应用的框架,容器。
具体使用要依情况而定

文章如果有不对或者不足的地方,欢迎大佬们指正,补充。感谢大家的阅读,如果感觉博主写的还可以,麻烦点个赞支持一下,阿里嘎多。拜托了,这对我真的很重要~
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性表链表是两种常见的数据结构,它们有一些相似之处,但也有一些区别。下面是线性表链表优缺点以及它们之间的区别: 线性表的优点: 1. 随机访问:线性表可以通过索引快速访问任意位置的元素。 2. 内存连续:线性表的元素在内存中是连续存储的,这样可以提高访问效率。 线性表的缺点: 1. 插入和删除操作:在线性表中插入和删除元素时,需要移动其他元素,这样会导致操作的时间复杂度较高。 2. 大小固定:线性表的大小是固定的,如果需要存储更多的元素,需要重新分配内存空间。 链表的优点: 1. 插入和删除操作:链表在插入和删除元素时,只需要修改指针的指向,不需要移动其他元素,所以操作的时间复杂度较低。 2. 大小可变:链表的大小可以根据需要动态调整,不需要预先分配内存空间。 链表的缺点: 1. 随机访问:链表不能像线性表那样通过索引快速访问元素,需要从头开始遍历链表才能找到指定位置的元素。 2. 额外的内存开销:链表中每个节点都需要额外的指针来指向下一个节点,这样会增加内存开销。 线性表链表的区别: 1. 存储方式:线性表的元素在内存中是连续存储的,而链表的元素在内存中是通过指针连接起来的。 2. 访问效率:线性表可以通过索引快速访问任意位置的元素,而链表需要从头开始遍历才能找到指定位置的元素。 3. 插入和删除操作:线性表在插入和删除元素时,需要移动其他元素,而链表只需要修改指针的指向。 4. 大小可变性:线性表的大小是固定的,而链表的大小可以根据需要动态调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值