算法训练--删除顺序表中所有值为x的元素

66 阅读1分钟

删除顺序表中所有值为x的元素

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

//题目:删除顺序表中所有值为x的元素,时间O(n),空间O(1)
typedef int ElemType;
typedef struct{
    ElemType *data;
    int TableLen;
}SqList;

void InitList (SqList &L,int len)//初始化顺序表
{
    L.TableLen = len;
    L.data = (ElemType*)malloc(sizeof(ElemType)*L.TableLen);
    int i;
    srand(time(NULL));
    for (i = 0;i < L.TableLen ; i++)
    {
        L.data[i] = rand()%100;
    }
}

void print_list(SqList L)//打印函数
{
    for(int i = 0; i<L.TableLen ;i++)
    {
        printf("%-3d",L.data[i]);
    }
    printf("\n");
}

void Del_List(SqList &L,ElemType x)
{
    int k = 0,i;//用k记录和x不相等元素的个数
    for(i = 0; i < L.TableLen ; i++)
    {
        if(L.data[i] != x)
        {
            L.data[k++] = L.data[i];
        }
    }
    L.TableLen = k;
}

int main() {
    SqList L;
    InitList(L,10);//创建顺序表,长度为10
    ElemType A[10] ={66,9,44,77,55,9,11,9,33,88};
    memcpy(L.data,A,sizeof(A));
    print_list(L);//打印原始顺序表做对照

    Del_List(L,9);//删除所有值为9的数据元素
    print_list(L);//打印操作完成后顺序表
    return 0;
}