题目:
从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同
算法思想:
(因为是有序顺序表,所以值相同的元素一定在连续的位置上,用类似于直接插入法的思想)
第一步:将第一个元素看成非重复的有序表
第二步:依次判断重复有序表中后面的元素与非重复有序表中最后一个元素是否相同,如果相同,则继续向后判断;如果不相同,则插入到非重复有序表最后,直到表尾。
代码:
bool Del_same(Sqlist &L) {
if (L.length == 0) //题目给不给提示,都要首先考虑表空的情况下,显示出错信息false,并退出运行
return false;
int i,j;//i存储第一个不相同的元素,j为工作指针
for (i =0,j=1; j < length; j++) {
if (L.data[i] != L.data[j])//查找下一个与上个元素值不相同的元素
L.data[++i] = L.data[j];//找到后,将元素前移
}
L.length = i + 1;
return true;
}