数据结构笔记3:顺序表的逆序操作、删除特定值操作

1、将顺序表L中所有元素逆置

注意:交换L.length/2次即可

//将顺序表中的所有元素逆置
//算法思想,依次执行:第一个值和最后一个值互换,第二个值和倒数第二个值互换......
#include"head.h"
void Reverse(SeqList &L) {
	int n;//用作交换的第三方
	for (int i = 0; i < L.length / 2; i++) {//循环到中间即可交换结束
		n = L.data[i];
		L.data[i] = L.data[L.length - i - 1];//注意位序与下标的关系
		L.data[L.length - i - 1] = n;
	}
}
int main() {
	SeqList L;
	InitList(L);
	int i;
	for (int i = 0; i < 10; i++) {//插入10个元素,自定义插入 
		ListInsert(L, i + 1, i + 1);
	}
	printf("原顺序表内容为:\n");
	for (int i = 0; i < L.length; i++) {
		printf("data[%d]=%d\n", i, L.data[i]);
	}
	Reverse(L);
	printf("顺序表逆序内容为:\n");
	for (int i = 0; i < L.length; i++) {
		printf("data[%d]=%d\n", i, L.data[i]);
	}
}

2、对长度为n的顺序表L,删除其中所有值为x的数据元素,要求时间复杂度为O(n)。

注意:时间复杂度为O(n),首先排除排序操作,其时间复杂度为O(nlogn)

//删除表中值为X的元素,时间复杂度O(n),空间复杂度O(1)
//算法思想,定义一个值来记录表中不为X的元素个数,保存下来
#include"head.h"
void del_x_L(SeqList &L,int x) {
	int k = 0;
	for (int i = 0; i < L.length; i++) {
		if(L.data[i]!=x){
			L.data[k]=L.data[i];
			k++;
		}//若data[i]=x的话,则不执行if语句,i+1,k不变,碰到下一个不相等的数,往前挪动i-k个位置
		//k<i,这样就舍去了表中x的值。,始终k<=i;表中不存在值为x的数时相等,
	}
	L.length = k;
}
int main() {
	SeqList L;
	InitList(L);
	for (int i = 0; i < InitSize; i++) {//手动输入最初数组长度个数的数
		scanf_s("%d", &L.data[i]);
		L.length++;                  //每输入一个数顺序表的当前长度加1 
	}
	printf("顺序表内容为:\n");
	for (int i = 0; i < L.length; i++) {
		printf("data[%d]=%d\n", i, L.data[i]);
	}
	del_x_L(L, 2);
	printf("删除元素后顺序表内容为:\n");
	for (int i = 0; i < L.length; i++) {
		printf("data[%d]=%d\n", i, L.data[i]);
	}
}

头文件代码参考“数据结构笔记2”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值