2021王道数据结构2.2.3_2.4//从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素, //如果s或t不合理或者顺序表为空,则显示错误信息并退出。

2.2.3_2.4

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

#include<stdio.h>
#define MaxSize 10
typedef struct{
	int data[MaxSize];
	int length;
}SqList;
bool InitList(SqList &L){
	int i=0;
	for(i=0;i<MaxSize;i++){
		L.data[i] = 0;
	}	
	L.length = 0;
	return true;
}
//按位序插入 
bool InsertList(SqList &L,int i,int e){
	if(i<1||i>L.length+1){
		return false;
	}
	if(L.length>=MaxSize){
		return false;
	}
	int j=0;
	for(j=L.length;j>i-1;j--){
		L.data[j] = L.data[j-1];
	}
	L.data[j] = e;
	L.length++;
	return true;
}
void display(SqList L){
	int i=0;
	for(i=0;i<L.length;i++){
		printf("%d ",L.data[i]);
	}
	printf("\n");
}

//删除指定位序元素 
bool DeleteList(SqList &L,int i){
	int temp=0; 
	if(i<1||i>L.length+1){
		return false;
	}
	if(L.length==0){
		return false;
	}
	int j=0;
	for(j=i-1;j<L.length-1;j++){
		temp = L.data[j];
		L.data[j] = L.data[j+1];
	}
	L.length--;
	return true;
}
/*
//从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,
//如果s或t不合理或者顺序表为空,则显示错误信息并退出。
bool DeleteByRange1(SqList &L,int s,int t){
	if(s>=t){//st不符合 
		return false;
	}
	if(L.length==0){//顺序表为空 
		return false;
	}
	int j=0;
	int begin=0,end=0;
//	for(i=0;i<L.length;i++){
//		if(L.data[i]>s&&L.data[i]<t){
//			
//		}
//	}
	j=0;
	while(L.data[j]>s){//找到第一个大于s的元素 
		j++;
	}
	begin = j;
	
	j=0;	
	while(L.data[j]<t){//找到最后一个小于s的元素 
		j++;
	}
	end = j;	 
	for(j=begin;j<=end;j++){
		DeleteList(L,j);
	} 
	return true;
}
*/
//参考2.3题的思想,将应当保留的数据建立为一个新的顺序表 
bool DeleteByRange2(SqList &L,int s,int t){
	int k=0,i;
	for(i=0;i<L.length;i++){
		if(L.data[i]<s||L.data[i]>t){//保留下来小于s和大于t的数字 
			L.data[k] = L.data[i];
			k++;
		}
	}
	L.length = k;
}

//标答,思想:先寻找值>=s的第一个元素(第一个删除的元素),
//然后寻找值>=t的第一个元素(最后一个删除的元素的下一个元素)
//要将这段元素删除,只需要将后面的元素前移。 
bool Del_s_t2(SqList &L,int s,int t){
	int i=0,j=0;
	if(s>=t||L.length==0){
		return false;
	}
	for(i=0;i<L.length&&L.data[i]<s;i++);//寻找值>=s的第一个元素,第一个要删除的元素 
	if(i>=L.length)//若所有值均小于s,返回false 
		return false; 
	for(j=i;j<L.length&&L.data[j]<=t;j++);//寻找值<=t的第一个元素,第一个不删除的元素 
	for(;j<L.length;i++,j++)
		L.data[i] = L.data[j];	//前移,填补被删除元素的位置 
	L.length = i;
	return true;		
} //此种算法与我类似 
 
int main(){
	SqList L1,L2;
	InitList(L1);
	InitList(L2);
	int i=0;
	for(i=1;i<10;i++){
		InsertList(L1,i,i);
	}
	display(L1);	
	
//	DeleteByRange2(L1,2,5);
//	display(L1);	
	
	Del_s_t2(L1,2,5); 
	display(L1);		
	
	return 0;
} 

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值