删除线性表中所有值为x的元素

时间复杂度O(n),空间复杂度O(1)。

简单的问题两种不同的思路。

代码:

#include <stdio.h>
#define MAX 100
struct sqlist{
    int data[MAX];
    int length;
}s;
void input(sqlist *s) {
    printf("请输入元素个数:");
    scanf("%d",&s -> length);
    printf("请输入%d个元素:",s -> length);
    for(int i = 0;i < s -> length;i ++) {
        scanf("%d",&s -> data[i]);
    }
}
void print(sqlist s) {
    printf("%d\n",s.length);
    for(int i = 0;i < s.length;i ++) {
        printf("%d ",s.data[i]);
    }
    putchar('\n');
}
void del_1(sqlist *s,int x) {//记录不等于x的个数
    int k = 0;
    for(int i = 0;i < s -> length;i ++) {
        if(s -> data[i] != x) s -> data[k ++] = s -> data[i];
    }
    s -> length = k;
}
void del_2(sqlist *s,int x) {//记录等于x的个数
    int k = 0;
    for(int i = 0;i < s -> length;i ++) {
        if(s -> data[i] == x) k ++;
        else s -> data[i - k] = s -> data[i];
    }
    s -> length -= k;
}
int main() {
    input(&s);
    int x;
    printf("请输入x:");
    scanf("%d",&x);
    del_1(&s,x);
    print(s);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/8023spz/p/11838327.html
今日推荐