#include <iostream>
using namespace std;
#define MAXSIZE 10000
typedef struct
{
int *elem;
int num;
}SqList;
void InitList(SqList &L)
{
L.elem=new int[MAXSIZE];
if(!L.elem) return;
L.num=0;
return;
}
void Input(SqList &L,int n)
{
int i=0;
while(i<n)
{
int e;
cin>>e;
if(i==n) break;
L.elem[i]=e;
L.num++;
i++;
}
return ;
}
void Output(SqList &L)
{
int i;
for(i=0;i<L.num;i++)
{
cout<<L.elem[i];
if(i!=L.num-1)cout<<" ";
} //错误:cout<<L.elem[i]<<"*";
cout<<endl;
return;
}
void Del_item(SqList &L)
{
int item;int i;int j;int flag[100];
cin>>item;
for(i=0;i<L.num;i++)
if(L.elem[i]==item)
{
flag[L.elem[i]]=1;
}
int s=L.num;int k=0;
for(i=0;i<s;i++)
if(flag[L.elem[i]]!=1)
{
//for(j=i;j<L.num-1;j++)//不必要的循环
L.elem[k]=L.elem[i];
k++;
//L.num--;
//key
}
L.num=k;
}
int main()
{
int k;
cin>>k;
while(k!=0)
{
SqList L;
InitList(L);
Input(L,k);
// cout<<"1";
//Output(L);
Del_item(L);
Output(L);
cin>>k;
}
return 0;
}
描述
利用顺序表表示一个包括n个整数的序列,请实现一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法可以删除表中所有值为item的元素。
输入
多组数据,每组数据有三行,第一行为顺序表的长度n,第二行为顺序表的n个元素(元素之间用空格分隔),第三行为待删除的元素的值item。当n=0时输入结束。
输出
对于每组数据分别输出一行,依次输出删除值为item的元素后顺序表中的剩余元素,元素之间用空格分隔。
输入样例 1
5 44 11 22 33 22 11 6 22 33 11 33 33 55 33 0
输出样例 1
44 22 33 22 22 11 55
原博地址
https://blog.csdn.net/weixin_43673589