数据结构——线性表的顺序表示(3)

题目来源于王道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("\n输入初始值:");
53     CreateList(L, length);
54     printf_s("输入要删除的数字:");
55     scanf_s("%d", &x);
56     DeleteX(L,x);
57     printf_s("\n删除后的顺序表的元素如下:");
58     ShowList(L);
59     printf_s("\n");
60     system("pause");
61     return 0;
62 }

测试结果:

转载于:https://www.cnblogs.com/abyss1114/p/7283493.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值