C语言高效算法:删除无序顺序表中重复元素
C语言高效算法:删除无序顺序表中重复元素
本文介绍一种用C语言实现的高效算法DeleteSame,用于从无序顺序表中删除所有重复的元素。
代码示例c#include <stdio.h>
#define MAX_SIZE 100
typedef struct { int data[MAX_SIZE]; int length;} SqList;
void DeleteSame(SqList *L) { int i, j, k; for (i = 0; i < L->length - 1; 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--; // 继续检查当前位置的元素 } } }}
int main() { SqList list; int i, n;
printf('Enter the length of the list: '); scanf('%d', &list.length);
printf('Enter the elements of the list:
'); for (i = 0; i < list.length; i++) { scanf('%d', &list.data[i]); }
printf('Original list: '); for (i = 0; i < list.length; i++) { printf('%d ', list.data[i]); }
DeleteSame(&list);
printf('
List after deleting duplicates: '); for (i = 0; i < list.length; i++) { printf('%d ', list.data[i]); }
return 0;}
算法说明
- 定义顺序表结构
SqList,包含存储数据的数组data和表示顺序表长度的整数length。2.DeleteSame函数接受一个顺序表指针作为参数。3. 使用两层循环遍历顺序表元素。外层循环遍历每个元素,内层循环将当前元素与后面的元素比较。4. 如果发现重复元素,则将后面的元素依次前移一位,并将顺序表长度减一。5. 内层循环索引j递减1,确保在删除元素后继续检查当前位置。
算法复杂度
该算法的时间复杂度为O(n^2),其中n为顺序表的长度。
注意事项
对于需要更高效率的场景,可以考虑使用哈希表等数据结构来优化算法。
原文地址: https://www.cveoy.top/t/topic/FHc 著作权归作者所有。请勿转载和采集!