从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,
如果s或t不合理或顺序表为空,则显示出错信息并退出运行。
思路:
数组:1 2 4 6 10 15
从有序可以看出,找到介于s与t之间的那些元素
例如:s=2;t=6;
找到第一个大于等于s的值:2
找到第一个大于t的值:10
我们就可以进行相应的赋值,将从10后面往前面进行赋值就可以了
例如:s=3;t=-11;
第一个大于等于s的值:4;
就是说如果没有从三删除,它应该从四开始
第一个大于t的值:15
然后从15这里一次往前复制过去
操作前数组:1 2 4 6 10 15
操作后数组:1 2 15 NULL NULL NULL
代码:
define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void deletePoint(int *arr, int s, int t, int len){
int k=0,i=0;
for(i=0;i<len&&*(arr+i)<s;i++)
//依次从前往后遍历,对于i<s的元素跳过,直到找到第一个大于等于s的元素
if(i>=len)
//如果这个i它已经大于或者等于那个数组的长度 ,就报错,直接return
return;
for(k=i;k<=len&&*(arr+k)<=t;k++);
//然后从i开始向后找到第一个大于t的元素
for(;k<len:i++;k++){
*(arr+i)=*(arr+k);
}//从k元素开始依次往前搬运
printf("当前数组为: ");
for(int j=0;j<i;j++)
printf("%d ",*(arr+j));
}
int main(){
int arr[]={1,2,4,6,10,15};//手动输入一个数组,也可以由用户输入
int s, t; //用于给定区间范围
int len=sizeof(arr)/sizeof(int);
printf("请输入区间范围,s<t\n");
do{
printf("s= ");
sacnf("%d ",&s);
printf("t=");
scanf("%d",&t);
}whlie(s>t);
deletePoint(arr, s, t, len);
return 0;
}