#include<iostream>
using namespace std;
#define MaxSize 100
//从有序顺序表中删除其值在给定s与t之间(要求s<t)的所有元素,如果s或t不合理或者顺序表为空,则显示出错信息并退出运行
typedef struct{
int data[MaxSize];
int Length;
}SqList;
//扫描L,用j表示第一个要删除的元素,k表示最后一个要删除的元素,锁定位置后从开始删除的位置其后元素依次往前移动(k-j+1)个位置
bool delete_in(SqList &L,int s,int t) {
if(s>=t || L.Length==0)
return false;
int i,j,k,m;//j,k记录删除的首、尾位置
int flag1=0;
int flag2=0;
for(i=0;i<L.Length;i++){
if(L.data[i]>=s && !flag1){
j=i;//找到起始位置
flag1=1;
}
if(L.data[i]>t && !flag2) {
k=i-1;//找到末尾位置
flag2=1;
}
}
//移动元素位置
m=k-j+1;
L.Length=L.Length-m;
for(int i=j;i<L.Length;i++)
L.data[i]=L.data[i+m];
return true;
}
int main(){
SqList li;//定义顺序表
cout<<"请输入数组长度:";
cin>>li.Length;
cout<<"请输入值:" ;
for(int i=0;i<li.Length;i++)
{
cin>>li.data[i];
}
int s,t;
cout<<"请输入s和t的值:";
cin>>s>>t;
if(!delete_in(li,s,t))
cout<<"出错";
else {
cout<<"删除后的数组为";
for(int i=0;i<li.Length;i++)
cout<<li.data[i]<<" ";
cout<<endl;
}
return 0;
}