时间复杂度都为o(n)
#include<stdio.h>
#include<stdlib.h>
#define maxn 111111
typedef struct
{
int a[maxn];
int len;
}sequence_list;
void dele(sequence_list *L,int min,int max) //删除顺序表中大于等于min,小于max,的数,时间复杂度o(n)
{
int i=0,tail=0;
for(i=0;i<L->len;i++)
if(L->a[i]<min||L->a[i]>max) //若当前的值比min小,或比max大,直接赋给前面的空格
L->a[tail++]=L->a[i]; //尾指针后移
L->len = tail;
}
void dele_one(sequence_list *L,int x) //删除顺序表中所有x的值 ,时间复杂度o(n)
{
int i=0,tail=0;
for(i=0;i<L->len;i++)
if(L->a[i]!=x)
L->a[tail++]=L->a[i];
L->len=tail;
}
void print(sequence_list *L)
{
int i;
for(i=0;i<L->len;i++)
printf("%-5d",L->a[i]);
printf("\n");
}
int main()
{
int n,i;
sequence_list L;
while(~scanf("%d",&n))
{
L.len=n;
for(i=0;i<n;i++)
scanf("%d",&L.a[i]);
dele_one(&L,4);
print(&L);
}
}