王道 数据结构 p17 第5题
从顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并退出运行.
#include<iostream>
#define InitSize 100
#define arrLen 7
using namespace std;
typedef struct { //声明一个动态分配内存的顺序表
int *data;
int len,MaxSize;
}SeqList;
void init(SeqList &L){ //初始化顺序表
L.data=new int[InitSize];
L.len=0;
if(L.data!=NULL)
cout<<"success!" <<endl;
else
cout<<"faild"<<endl;
}
void input(SeqList &L){ //给顺序表输入数值
for(int i=0;i<arrLen;i++)
{
cout<<"请输入第"<<i+1<<"个数字:";
cin>>L.data[i];
L.len++;
}
}
void output(SeqList &L) //输出顺序表
{
for(int i=0;i<L.len;i++)
{
cout<<L.data[i]<<" ";
}
cout<<endl;
}
//用k统计顺序表中不在s-t之间的元素 法一
/*int deleteST(SeqList &L,int s,int t)
{
int k=0;
if(s>=t||L.len==0)
{
cout<<"error!"<<endl;
return 0;
}
for(int i=0;i<L.len;i++)
{
if(L.data[i]<s||L.data[i]>t)
{
L.data[k]=L.data[i]; //妙妙妙
k++;
}
}
L.len=k;
}
*/
int deleteST(SeqList &L,int s,int t)//法二 用k记录s-t之间的数字,后面的数字前移k位即可。
{
int k=0;
if(s>=t||L.len==0)
{
cout<<"error!"<<endl;
return 0;
}
for(int i=0;i<L.len;i++)
{
if(L.data[i]>=s&&L.data[i]<=t)
{
k++;
}
else
L.data[i-k]=L.data[i];
}
L.len-=k;
}
int main(){
SeqList L;
init(L);
input(L);
// selectionSort(L);
cout<<endl<<"删除前:" ;
output(L);
int s=0,t=0;
cout<<endl<<"请输入要删除元素的范围:"<<endl;
cin>>s>>t;
deleteST(L,s,t);
cout<<endl<<"删除后:" ;
output(L);
return 0;
}