C语言从有序顺序表中删除所有重复的元素

这里涉及到数据结构中顺序表的实现、删除、插入、查找等知识,请查看:数据结构 -> 线性表

问题描述:

从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。

问题解答:

算法思想:注意是有序顺序表,值相同的元素一定在连续的位置上,用类似于直接插入排序的思想,初始时将第一个元素看做是非重复的有序表。之后顺序依次判断后面的元素是否与前面非重复有序表的最后一个元素相同,如果相同则继续向后判断,如果不同则插入到前面的非重复有序表的最后,直至判断到整个表尾为止。

本题代码如下:
bool Delete_Same(SeqList & L){
    if(L.length==0)
        return false;

    int i,j;  //i存储第一个不相同的元素,j工作指针

    for(i=0,j=1; j<L.length; j++)
        if(L.data[i] < L.data[j])  //查找下一个与上个元素值不同的元素

    L.data[++i] = L.data[j];  //找到后,则将元素前移
    L.length = i+1;
}
对于本题的算法,请读者以序列1,2,2,2,2,3,3,3,4,4,5来手动模拟算法的执行过程,在模拟的过程中要标注i和j所指示的元素。