文章目录
- 一【题目类别】
- 二【题目来源】
- 三【题目描述】
- 四【解题思路】
- 五【时间频度】
- 六【代码实现】
- 七【程序测试】
一【题目类别】
二【题目来源】
- 本题目选自王道2023考研计算机数据结构复习指导18页中二、综合应用题之06题
三【题目描述】
- 从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。
四【解题思路】
- 这道题目需要注意的是题目给的是有序顺序表,也就是值相同的元素在连续的相邻位置上,所以我们设置两个指针,假设第一个元素视为非重复的有序表,那么第一个指针就指向非重复元素的有序表的最后一个位置,那么第二个指针为工作指针,向后依次寻找不重复的元素,如果遇到了,就将不重复的元素移动到前面,否则就继续向下寻找
五【时间频度】
- 时间复杂度:O ( n ) O(n) O(n),其中n n n为顺序表长度
- 空间复杂度:O ( 1 ) O(1) O(1)
六【代码实现】
#define _CRT_SECURE_NO_WARNINGS#include#include#define MaxSize 50typedef int ElemType;typedef struct{ElemType data[MaxSize];int length;}SqList;void Delete_Same(SqList L){if (L.length == 0){return 0;}int index = 0, cur = 1;while (cur < L.length){if (L.data[index] != L.data[cur]){index++;L.data[index] = L.data[cur];}cur++;}L.length = index + 1;printf("删除重复元素后的顺序表为:");for (int i = 0; i < L.length; i++){printf("%d ", L.data[i]);}printf("\n");}int main(){SqList L;L.length = 0;int len;printf("请输入顺序表长度(长度应≤50):");scanf("%d", &len);printf("请输入顺序表元素:");for (int i = 0; i < len; i++){scanf("%d", &L.data[i]);L.length++;}printf("初始顺序表为:");for (int i = 0; i < L.length; i++){printf("%d ", L.data[i]);}printf("\n");Delete_Same(L);system("pause");return 0;}
七【程序测试】

解梦吧