静态链表(数组、链表和静态链表的操作)

因为是线性表,不能只讲链表,所以今天提一下静态链表以及数组、链表、静态链表之间的对比

数组基本结构没得说,插入和删除的操作也是有的(虽然看着不比较诡异)
一般是动态分配一个足够长的,记录有多少个元素后对这个个数进行加减,而不是每插入一个就动态分配
(其实这样也行,要是不怕麻烦的话)
另外在插入删除操作之后要把这个点之后的元素都进行移动,还是相当麻烦的;
不过数组有一个好处就是方便找到第几个元素。

插入删除的时间复杂度问题和平均移动次数:默认了每一个结点的查找概率相同
所以插入一个结点的概率是1/(n+1) 删除则是1/n,
而每次插入要移动的个数是n-i+1,删除移动的个数是n-i,
将概率乘移动次数,i从1到n的求和(插入应该是到n+1),就是时间复杂度了;
同理平均移动次数就是次数的平均数。

对于链表,没有长度限制的问题,可以放飞自我了
插入删除很简单了,修改一下指针就有了,理论上的时间复杂度就是o(1),但是如果是要遍历查找某一个点然后再进行,那就比较烦了,因为链表并不适合进行遍历操作。

综上,数组和链表各有优劣,所以用什么还是要看自己想干什么,是插入删除多还是查找遍历多
补一点,因为链表是指针连接的方式,所以物理地址不一定是连续的,而数组在定义的时候一定是连续的物理空间。

至于静态链表,个人感觉属于万金油,可能跟他是两者之间的过度有关系吧。
(感觉这个东西和后面的树、图的邻接表还是有关系的)
在很久很久以前,有一群传说中的sh大牛,每当数组不够用的时候,他们总能想到办法代替(雾)
mmp才看到有自带表格
用一个结构体数组,只使用一部分区域,剩下的留着调用。
每一个结构体,有一个数据域,有一个int型变量,这个就相当于链表的指针,指向 数组中的地址,也就是数组元素的下标,如图,第一个a[0]作为头节点,指向a[1] (最后一列的1)a[1]->a[2]->a[3]->NULL(其实应该是0,就代表了尾节点)
此时的插入删除操作就不需要malloc和free函数,而是从没有存储数据的多余结点里面选一个,赋值&插入;而删除就是将一个结点放回没被利用的空间内部。
(剩下的结点在正常的操作里面是构成了一个链表)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值