顺序表整体删除某值或某一区间

来源:互联网 发布:html视频播放器源码 编辑:程序博客网 时间:2024/05/01 18:14

时间复杂度都为o(n)

#include<stdio.h>#include<stdlib.h>#define maxn 111111typedef 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);    }}


0 0