顺序表的基本操作

0.定义(静态分配数组)

#define MaxSize 100
typedef struct{
	Elemtype data[MaxSize];
	int length;
}SqList; 

1.插入

bool ListInsert(SqList &L, int i, ElemType e){
	//判断i的取值是否有效(1<=i<=L.length+1)
	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++;//修改length
	return true;
}

最好时间复杂度:O(1);最好情况移动次数:0
最坏时间复杂度:O(n);最坏情况移动次数:n
平均时间复杂度:O(n);平均情况移动次数: 1 n + 1 ∑ i = 1 n + 1 ( n − i + 1 ) = n 2 \frac{1}{n+1}\sum_{i=1}^{n+1}(n-i+1)=\frac{n}{2} n+11i=1n+1(ni+1)=2n

2.删除

bool ListDelete(SqList &L, int i, Elemtype &e){
	//判断i的取值是否有效(1<=i<=L.length)
	if(i < 1 || i > L.length)
		return false;
	
	e = L.data[i - 1];
	for(int j = i; j < L.length; j++)
		L.data[j - 1] = L.data[j]
	L.length--;//修改length
	return true;
}

最好时间复杂度:O(1);最好情况移动次数:0
最坏时间复杂度:O(n);最坏情况移动次数:n-1
平均时间复杂度:O(n);平均情况移动次数: 1 n ∑ i = 1 n ( n − i ) = n − 1 2 \frac{1}{n}\sum_{i=1}^{n}(n-i)=\frac{n-1}{2} n1i=1n(ni)=2n1

3.查找

①按位查找

ElemType GetElem(SqList L, int i){
	//判断i的取值是否有效(1<=i<=L.length)
	if(i < 1 || i > L.length)
		return false;
		
	return L.data[i - 1];
}

动态分配访问数组与静态分配访问普通数组相同。
时间复杂度:O(1)

②按值查找(顺序查找)

int LocataElem(SqList L, ElemType e){
	int i;
	for(int i = 0; i < L.length; i++)
		if(L.data[i] == e)//int、char、float、double等基本数据类型可以用==直接比较。结构体,C语言不可以;C++使用重载;但研究生初试中可以(科目名为C语言程序设计等除外)
			return i + 1;//返回位序
	return 0;
}

最好时间复杂度:O(1);最好情况比较次数:1
最坏时间复杂度:O(n);最坏情况比较次数:n
平均时间复杂度:O(n);平均情况比较次数: 1 n ∑ i = 1 n i = n + 1 2 \frac{1}{n}\sum_{i=1}^{n}i=\frac{n+1}{2} n1i=1ni=2n+1

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值