【数据结构】静态分配的顺序表的删除元素

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

#define maxSize 10

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

void initList(SqList &L) {
	for(int i=0;i<L.length;i++) {
		L.data[i]=0;
	}
	L.length=0;
}

/**
* 思路:删第i个元素,那就将第i+1个位置的元素移到第i个位置,依次类推
* 此时就要循环第i个元素及其之后的元素的值,使得L.data[i-1]=L.data[i] 
* 第i个元素之前的元素保持不动,在循环时,就让j从i的值开始,加判断条件,j<i的元素不要动 
* 注意:i是位序,从1开始,data[下标]获取元素值,下标从1开始,所以拿到第i个位置的元素值就是L.data[i-1] 
*
*/
// 删除顺序表第i个位置的数据元素,假设i=3,e是为了将删除的元素的值返回 
bool ListDelete(SqList &L, int i, int &e) {
	// 为了代码健壮性,要兼容一下
	if(i<1 || i>L.length) {
		return false;
	} 
	e=L.data[i-1];		// 将要删除元素的值给e 
	for(int j=i;j<L.length;j++) {
		L.data[j-1] = L.data[j];	
	}
	L.length--;
	return true;
}

int main() {
	SqList L;
	int e;
	initList(L);
	if(ListDelete(L,0,e)) {
		printf("%d\t当前删除的元素e\n", e); 	
	}else {
		printf("位序i不合法,删除失败\n"); 	
	}	
} 
// 分析时间复杂度
// 1、删除表尾元素,就不需要移动,i=n,循环0次,时间复杂度为O(1)
// 2、删除表头元素,i=1,循环n-1次,时间复杂度为o(n) 
// 3、删除除表头、表尾外的任意一个元素,它们的概率都是1/n
	// i=1,循环n-1次,i=2,循环n-2次,...i=n,循环0次
	// 平均循环次数=循环总次数*概率=(1+2+3+...+n)*(1/n)=(n(n-1)/2)*(1/n)=(n-1)/2
	// 时间复杂度为o(n) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值