从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。
算法思想:
由于是有序顺序表,值相同的元素一定在连续的位置上,用类似于直接插入排序的思想,初始时将第一个元素视为非重复的有序表。之后依次判断后面的元素是否是与前面非重复有序表的最后一个元素相同,若相同则继续向后判断,若不同则插入到前面的非重复有序表的最后,直至判断到表尾为止。
代码:
#define InitSize 100
typedef struct{
ElemType *data;
int MaxSize;
int length;
}SeqList;
bool Delete_Same(SeqList &L)
{
if(L.length == 0)
return false;
//i存储第一个不相同的元素,j为工作指针
int 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
return true;
}