C语言实现顺序表删除重复元素算法
C语言实现顺序表删除重复元素算法
本文提供一个使用C语言实现的算法,用于删除顺序表中的重复元素,并附带详细代码示例和解释。
算法实现
以下是基于给定设定的算法实现,用于删除顺序表中的重复元素的C语言版本:c#include <stdio.h>
#define MAXLEN 100
typedef struct { int data[MAXLEN]; int len;} LIST;
LIST remove_duplicates(LIST lst) { if (lst.len <= 1) { return lst; }
int index = 1; for (int i = 1; i < lst.len; i++) { if (lst.data[i] != lst.data[index-1]) { lst.data[index] = lst.data[i]; index++; } }
lst.len = index; return lst;}
int main() { LIST lst = {{1, 1, 2, 3, 3, 3, 4, 5, 5}, 9};
lst = remove_duplicates(lst);
printf('Modified list: '); for (int i = 0; i < lst.len; i++) { printf('%d ', lst.data[i]); } printf('
');
return 0;}
算法说明
该算法通过遍历顺序表,将非重复元素依次向前移动,最终缩短表的长度,达到去重的效果。
- 初始化: 定义一个
index变量,初始值为1,用于指向下一个非重复元素存放的位置。2. 遍历: 从第二个元素开始遍历顺序表。3. 比较: 将当前元素与前一个元素比较,如果不同则说明该元素是非重复元素。4. 移动: 将非重复元素移动到index位置,并将index加一。5. 更新长度: 遍历结束后,将顺序表的长度更新为index的值。
总结
使用该算法,可以高效地删除顺序表中的重复元素。该算法时间复杂度为O(n),空间复杂度为O(1)。
原文地址: https://www.cveoy.top/t/topic/c0UH 著作权归作者所有。请勿转载和采集!