数据结构之线性表小结

线性表小结:

  1. 线性表的定义:零个或多个数据元素的有限序列(两个特性:有限,序列;同时要求数据的类型相同)
  2. 线性表的存储结构:顺序存储,链式存储

顺序存储结构

定义:指的是用一段连续的存储单元依次存储线性表的数据元素。

实现方式:用一维数组来实现顺序存储结构,即把第一个元素存放到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。其中数组的长度是存放线性表的存储空间的长度,因此任意时刻,线性表的长度应该小于数组的长度。

存取特点:在线性表的任意位置的存入或者取出数据都是相等的时间,时间复杂度是O(1),是随机存取结构

插入和删除特点

最好的情况是插入到第一个位置或者是删除最后一个位置的元素,时间复杂度为O(1);最坏的情况是插入到最后一个位置,或者是删除第一个元素,时间复杂度是O(n);平均情况是O(n-1/2),因此平均时间复杂度为O(n)。

顺序存储结构的优缺点:

优点:

  1. 无需为表示表中的元素之间的逻辑关系而增加额外的储存空间。
  2. 可以快速的存取表中的任意位置的元素

缺点:

  1. 插入和删除操作需要移动大量的元素
  2. 当线性表的长度变化较大时,难以确定存储空间的大小
  3. 会造成存储空间的“碎片”

链式存储结构:

定义:用一组任意的存储单元存储线性表的元素,这组存储单元可以是连续的,也可以是不连续的,这就意味着线性表中的元素可以存在内存中未被占用的任意的位置。因此在链式结构中,数据元素除了存储数据的元素信息之外,还要存储其后继元素的存储地址,因此每个结点包括数据域和指针域。

单链表的组成:

  1. 头结点:是为了操作的统一和方便设立的,放在第一个元素的结点之前(有了头结点对在第一元素结点前插入结点和删除第一结点,其操作与其他结点的操作就统一起来了,但是头结点不一定是链表的必需元素),其数据域一般为空(NULL)无意义,也可在数据域中存放链表的长度。
  2. 头指针:链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针,头结点中的指针域指向第一个结点;同时头指针有标识作用,常以链表的名字命名;无论链表是否为空,头指针都不为空(空链表头指针不为空,头结点中的指针域为空),且头指针是链表的必要元素。
  3. 其他线性表数据元素结点

链表的插入与删除特点:

插入和删除由两部分组成:第一部分就是遍历查找第i个元素,第二部分就是插入和删除操作。时间复杂度都是O(n);在插入和删除操作上链式存储结构并没有比顺序存储结构有太大的优势,但是对于频繁的插入和删除操作,单链表的效率优势非常明显。(例:在第i个位置插入10个元素,对于顺序存储结构,每一次插入操作就是O(n)的时间复杂度,但是对于单链表的话,只需要在第一次找到i元素的位置,此时的时间复杂度为O(n),接下来的插入的操作时间复杂度均为O(1))。

4.单链表结构与顺序存储结构的对比

存储分配方式

时间性能

空间性能

顺序存储方式:用一段连续的存储单元一次存储线性表的数据元素。

单链表:采用链式存储结构,用一组任意的存储单元来存放线性表的元素

查找:

顺序:O(1)

单链表:O(n)

插入和删除

顺序存储结构:O(n)

单链表:在找出要插入的位置之后插入操作时间复杂度为O(1)

顺序存储结构:需要预先分配存储空间,空间分配过大的话,浪费存储空间;分配过小的话,会发生上溢。

单链表:不需要预先分配存储空间,只要有空间就可以分配,元素的个数也不受限

结论:

1.若频繁查找,很少进行插入和删除操作的话,适宜用顺序存储结构;

需要频繁的插入和删除操作,宜采用单链表结构

2.线性表中的元素个数变化较大时或者不清楚元素的个数适宜采用单链表;线性表的元素的个数固定或者提前知道数组元素的大致长度,适宜用顺序存储结构。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值