用c语言完整写出代码设计算法以删除顺序表中重复的元素,并分析算法的时间性能
时间: 2023-07-15 14:09:51 浏览: 105
以下是用C语言实现删除顺序表中重复元素的代码:
```c
#include <stdio.h>
#define MAXSIZE 100 // 定义顺序表的最大长度
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
void initList(SqList *L) { // 初始化顺序表
L->length = 0;
}
int deleteDuplicates(SqList *L) { // 删除顺序表中重复元素
int i, j, k;
for(i = 0; i < L->length; i++) {
for(j = i + 1; j < L->length; j++) {
if(L->data[i] == L->data[j]) {
for(k = j; k < L->length - 1; k++) {
L->data[k] = L->data[k + 1]; // 删除重复元素
}
L->length--; // 长度减一
j--; // j回退一步,以便于检测下一个元素是否重复
}
}
}
return L->length;
}
int main() {
SqList L;
int i, len;
initList(&L); // 初始化顺序表
// 给顺序表赋值
L.data[0] = 1;
L.data[1] = 2;
L.data[2] = 3;
L.data[3] = 2;
L.data[4] = 4;
L.data[5] = 2;
L.length = 6;
printf("原始顺序表:");
for(i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
len = deleteDuplicates(&L); // 删除顺序表中重复元素
printf("删除重复元素后的顺序表:");
for(i = 0; i < len; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
return 0;
}
```
算法分析:
该算法的时间复杂度为 O(n^2),其中 n 表示顺序表的长度。因为算法中使用了两层循环,所以时间复杂度为 O(n^2)。当顺序表的长度较大时,算法效率会比较低。
阅读全文