线性表顺序存储结构

本文介绍了线性表的概念,它是一条链子,每个元素有唯一的前驱和后继。线性表的顺序存储结构使用数组实现,存取操作时间复杂度为O(1),但插入和删除操作需要O(n)时间。讨论了插入和删除的操作过程,并指出该结构适合元素变化不大的场景。
摘要由CSDN通过智能技术生成

   1.什么是线性表?

   线性表可以看作一条链子除了第一个元素和最后一个元素,其他每个元素都有一个前驱

元素和一个后继元素有且只有一个。watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pel5L2c5pyI5oGv,size_20,color_FFFFFF,t_70,g_se,x_16

    若一个元素都没有,则称为空表。

   元素之间的关系是一一对应的关系。(就比如a2的前驱元素只有一个并且一定是a1,a2的后继元素也只有一个并且一定是a3)

   2.线性表的顺序存储结构:

   指用一段连续地址的存储单元依次存储线性表的数据元素。(就是用数组来存储线性表的数据元素)

   定义一个顺序存储结构的线性表

typedef struct

{

type data[max];   //需要定义数组长度

int length;   //线性表的当前长度,就是当前

                    //    线性表有几个元素

}

还要知道起始的位置,就是data的首地址

   因为数组是从下标0开始计起的,所以线性表的第 i 个元素存储在数组的下标为 i-1 的位置

   由于每个元素都有自己对应的下标位置且数组的第一个位置也是知道的,所以存入和读取数据的时间复杂度为O(1)。例如:把100存入第i个数据或读取第i个数据,只需找下标为 i-1 的元素进行存入或读取操作就行了,相当于执行了一次,所以算法复杂度为O(1)。

   3.顺序存储结构的插入和删除

   想一下在饭堂排队的情况,如果这时候有人插队,那么这个人后面的所有人都要向后移动一位。如果有个人看到另一队人少,就去排另一队了,那么这个人后面的所有人都向前移动一位。

   顺序存储结构的插入和删除也是一样:

插入元素:

1.判断:如果元素插入的位置不合理或者线性表长度大于数组长度则抛出异常。 O(1)

2.移动:从最后一个元素遍历到第i个元素的位置,把它们分别向后移动一位。O(n)

3.插入元素:把新元素插入位置 i  。 O(1)

4.线性表长度+1。

删除元素:

1.判断:如果元素删除的位置不合理则抛出异常。 O(1)

2.删除元素:把位置 i 的元素取出,赋给*e。 O(1)

3.移动:从第 i+1 个元素遍历到最后一个元素,把它们分别向前移动一位。O(n)

4.线性表长度 -1。

由上面可以看出顺序存储结构在存入、读取数据时的时间复杂度为O(1),而插入或删除元素时的时间复杂度为O(n)。说明它比较适合元素个数不太变化,而更多是存储数据的应用。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值