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;}

算法说明

  1. 定义顺序表结构SqList,包含存储数据的数组data和表示顺序表长度的整数length。2. DeleteSame函数接受一个顺序表指针作为参数。3. 使用两层循环遍历顺序表元素。外层循环遍历每个元素,内层循环将当前元素与后面的元素比较。4. 如果发现重复元素,则将后面的元素依次前移一位,并将顺序表长度减一。5. 内层循环索引j递减1,确保在删除元素后继续检查当前位置。

算法复杂度

该算法的时间复杂度为O(n^2),其中n为顺序表的长度。

注意事项

对于需要更高效率的场景,可以考虑使用哈希表等数据结构来优化算法。

C语言高效算法:删除无序顺序表中重复元素

原文地址: https://www.cveoy.top/t/topic/FHc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录