数据结构学习笔记---线性表:顺序表(插入)

目录

顺序表的基本操作——插入

插入操作的时间复杂度

顺序表的基本操作——删除

删除操作的时间复杂度


顺序表的基本操作——插入

首先,静态分配一个顺序表

#include <stdio.h>
#include <stdlib.h>

#define MaxSize 5  // 定义队列的最大长度

typedef struct {
	int data[MaxSize];
	int length;
}SqList;

然后实现插入方法,for循环

我们提前插入了四个元素,顺序排放

原理是以i为插入位置(位序),e为插入的元素,j为这个顺序表的长度为5,当j所代表的长度大于等于插入位置时,这个循环就会继续,每一轮循环之后j自减1,此时j为5,然后进入循环把原本在位序4的元素放到位序5的位置,然后循环继续到j<i,此时插入元素e,因为位序和数组下标不同,位序比下标多1,最后扩大顺序表的长度+1.

void ListInsert(SqList& L, int i, int e) {
	for (int j = L.length; j >= i; j--)
		L.data[j] = L.data[j - 1];
	L.data[i - 1] = e;
	L.length++;
}

但此时代码还不够健壮,我们无法让别人知道自己想插入的操作是否合法,此时要考虑到:

L的范围是(1,length+1),并且插入操作不能违反顺序表的规则,不能隔空插入

我们可以使用bool型来实现这个需求

bool ListInsert(SqList& L, int i, int e) {
	if (i<1 || i>L.length + 1)
		return false;
	if (L.length >= MaxSize)
		return false;
	for (int j = L.length; j >= i; j--)
		L.data[j] = L.data[j - 1];
	L.data[i - 1] = e;
	L.length++;
	return true;
}

这样代码就能够拥有足够的“防患于未然性”

插入操作的时间复杂度

关注最深层循环语句的执行次数与问题规模n的关系

L.data[j] = L.data[j - 1];

问题规模n=L.length(表长)

最好情况:新元素插入到表尾,不需要移动元素
i = n+1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值