数据结构算法题day05

数据结构算法题day05

题目

从顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素。
如果或t不合理或顺序表为空,则显示出错信息并退出运行

算法思路

查找、移动
扫描顺序表,将s-t之间数的个数记为k,将不是s-t之间的数向前移动k个单位

代码

1、先写核心代码
2、将框架补充完整

bool Del_t(sqlist &L ,Elemtype s , Elemtype t){
	int i = 0, k = 0;
	if (L.length == 0 || s >= t)
	 retuen false;
	for(i = 0,i < L.length,i++){
		if(L.data[i] >= s && L.data[i] <= t)
			k++;
		else 
			L.data[i-k] = L.data[i];//将元素移动K个单位
	}
	L.length = L.length - k;
	return true;
}

完整代码实现

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MaxSize 10//定义最大长度
int InitArr[10] = { 1,2,2,3,4,2,5,2,6,7 };

typedef struct {
	int data[MaxSize];//用静态的数据存放数据元素
	int length;//顺序表当前长度
}Sqlist;//顺序表的类型定义

void print(Sqlist* L)
{
	for (int i = 0;i < L->length;i++)
	{
		printf("%d ", L->data[i]);
	}
}
//初始化一个顺序表
void InitList(Sqlist* L)
{
	for (int i = 0;i < MaxSize;i++)
	{
		L->data[i] = InitArr[i];//将所有数据元素设置为默认初始值
	}
	L->length = 10;//顺序表初始长度为0
}
//对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,
//该算法删除线性表中的所有值为x的数据元素

//算法思路
bool Del_t(Sqlist* L ,int s ,int t){
	int i = 0, k = 0;
	if (L -> length == 0 || s >= t)
		return false;
	for(i = 0; i < L -> length ; i++){
		if(L -> data[i] >= s && L -> data[i] <= t)
			k++;
		else 
			L -> data[i-k] = L -> data[i];//将元素移动K个单位
	}
	L-> length = L->length - k;
	return true;
}
int main() 
{
	Sqlist L;
	InitList(&L);//初始化一个顺序表:1,2,2,3,4,2,5,2,6,7
	printf("初始顺序表为:");
	print(&L);
	
	printf("请输入2个值x进行删除操作:");
	int a = 0 , b = 0;
	scanf("%d %d", &a ,&b);

	printf("\n");	
	Del_t(&L,a,b);
	if(Del_t(&L,a,b) == true){
		printf("删除所有值为x的元素后顺序表为:");
		print(&L);
	}
	else
		printf("Error");	

	return 0;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值