C_顺序表(插入、删除操作)

15 篇文章 0 订阅
3 篇文章 0 订阅

在这里插入图片描述
ListInsert(SqList &L, int i, int e)
这个参数传入的依次是已开辟的结构体内存空间,要插入的位置,插入的值。
这样我们知道,我们首先要把插入的位置给空出来,所以理所当然的把i本身包括i后面元素的位置给往后挪。这样我们就需要用for循环来判断了。

for (int j=L.length; j>=i; j--)//将第i个元素及之后的元素后移。
{
	L.data[j] = L.data[j-i];
}
L.data[i-1] = e;				//在位置i处放入e
L.length++;						//长度+1

但是这样的话,我们仍然有可能出现一些内存溢出,或者留下“脏数据”
假设我们开辟的长度只有5,但别人调用这个function的时候,传入的int i参数大于我们开辟的长度(MaxSize),或者传入<1的参数。
所以这个时候我们就需要做判断。
在这里插入图片描述
根据我们所假设的问题,当别人传入要插入位置的参数错误时,这时候我们就需要提示使用者这样的操作不对,这样他既可以去找一下错误在哪,也不会对程序出现影响的。

----------------------------------------进阶 (对性能的影响)
在这里插入图片描述
时间复杂度 O(n) < O(nlogn) < O(n²)
根据循环的次数来看的。

在这里插入图片描述
一开始int e最好要赋值成-1、-2这种的。
还有,插入和删除的移位的顺序我们需要区分出来。一个是从最后length开始移后面的,另一个相反。
另外,我们还有一个课外技巧:ListDelete会在栈开辟新的空间。

删除操作的时间复杂度:
在这里插入图片描述
顺序表的位置逻辑上相邻物理上也是需要相邻的。
位序i = 数组下标位i - 1;
&引用!
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值