题目来源于王道2018数据结构考研复习指导线性表的综合练习
编译环境:VS2015
题目:长度为n的顺序表L,编写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的元素。
具体实现如下:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define initSize 50 4 5 typedef int ElementType; 6 typedef struct { 7 ElementType *data; 8 int length; 9 int maxSize; 10 }SeqList; 11 12 //初始化线性表 13 void InitList(SeqList &L) { 14 L.data = (ElementType*)malloc(sizeof(ElementType)*initSize); 15 L.length = 0; 16 L.maxSize = initSize; 17 } 18 19 //创建线性表 20 void CreateList(SeqList &L,int n) { 21 L.length = n; 22 for (int i = 0;i < L.length;i++) { 23 scanf_s("%d",&(L.data[i])); 24 } 25 } 26 27 //删除x 28 void DeleteX(SeqList &L,int x) { 29 int n=0;//记录不等于x的数的个数,初始化为0 30 for (int i = 0;i < L.length;i++) { 31 if (L.data[i] != x){ 32 L.data[n] = L.data[i]; 33 n++; 34 } 35 }//相当于对原来顺序表的更新,祛除值等于x的元素 36 L.length = n; 37 } 38 39 //显示 40 void ShowList(SeqList L) { 41 for (int i = 0;i < L.length;i++) { 42 printf_s("%d ",L.data[i]); 43 } 44 } 45 46 int main() { 47 SeqList L; 48 int length,x; 49 InitList(L); 50 printf_s("输入表的长度:"); 51 scanf_s("%d", &length); 52 printf_s(" 输入初始值:"); 53 CreateList(L, length); 54 printf_s("输入要删除的数字:"); 55 scanf_s("%d", &x); 56 DeleteX(L,x); 57 printf_s(" 删除后的顺序表的元素如下:"); 58 ShowList(L); 59 printf_s(" "); 60 system("pause"); 61 return 0; 62 }
测试结果: