问题
删除有序线性表中介于s~v之间的元素
#include<bits/stdc++.h>
using namespace std;
#define Max 50
struct SqList
{
int a[Max] = {1,2,3,3,4,5,6,7,7,7,8,9};
int length = 12;
};
bool listdelete(SqList &L,int s,int v)
{
if(s>=v||L.length ==0) return false;
bool flag = false;
int ss = 0;
for(int i = 0; i < L.length ;i++)
{
if(L.a[i]>=s)
{
ss = i;
flag = true;
break;
}
}
if(!flag) return false;//比如要找【10,20】不符合条件
int vv = 0;
for(int i = ss;i < L.length ;i++)
{
if(L.a[i]>v)
{
vv = i;
break;
}
}
int s1 = ss,v1 = vv;
for(int i = vv;i < L.length ;i++)
{
L.a[i-(v1-s1)] = L.a[i];
}
L.length = L.length -(v1-s1);
}
int main()
{
SqList L;
if(listdelete(L,3,7))
{
for(int i = 0;i < L.length;i++)
{
cout<<L.a[i]<<" ";
}
cout<<endl;
}else cout<<"错误"<<endl;
return 0;
}
//删除区间元素
#include<bits/stdc++.h>
using namespace std;
#define NUM 20
int main(){
int a[NUM];
int length=0;
cout<<"请输入一串数据,以-1为结束标志:"<<endl;
while(1){
cin>>a[length];
length++;
if(a[length-1]==-1||length>NUM) break;
}
length=length-1;//把没用的-1去掉
for(int i=0;i<length;i++){
cout<<a[i]<<" ";
}
cout<<endl;
int s,v;
cout<<"请输入要删除的区间元素:";
cin>>s>>v;
//判断下出错的情况
if(s>v||length==0) return -1;
int ss=0,vv=0;
int flag=0;//0错误1正确
for(int i=0;i<length;i++){
if(a[i]>=s){
ss=i;flag=1;break;//找到 第一个大于等于s的点即可
}
}
cout<<"ss="<<ss<<endl;
if(flag==0) return -1;//一个也没有找到 比如区间[10,20]
for(int i=0;i<length;i++){
if(a[i]>v){
vv=i;
break;
}
}
cout<<"vv="<<vv<<endl;
for(int i=vv;i<length;i++){
a[i-(vv-ss)]=a[i];
}
length=length-(vv-ss);
for(int i=0;i<length;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}