题目:从有序顺序表中删除所有其值重复的元素,是表中元素的值均不相同。
算法思想:
前提是有序顺序表,值相同元素一定在连续位置上。使用一个循环遍历顺序表中的元素。在循环中,使用一个变量
k
来记录连续重复的元素数量。如果当前元素与前一个元素相同,则k
加1,并将当前元素复制到i-k
的位置,实现向前移动覆盖重复元素的目的。
#include<stdio.h>
typedef int ElemType;
#define MaxSize 50
typedef struct {
ElemType data[MaxSize];
int length;
}SqList;
bool DeleteList(SqList &L)
{
int i;
if(L.length==0)
return false;
int k=0;
for (i = 1; i <L.length;i++) {
if(L.data[i]==L.data[i-1])
k++;
L.data[i-k]=L.data[i];
}
L.length-=k;
return true;
}
void Print(SqList L)
{
for(int i=0;i<L.length;i++)
{
printf("%3d",L.data[i]);
}
}
int main(){
SqList L;
L.data[0]=0;
L.data[1]=0;
L.data[2]=1;
L.data[3]=1;
L.data[4]=1;
L.data[5]=2;
L.data[6]=2;
L.data[7]=3;
L.data[8]=3;
L.data[9]=4;
L.data[10]=5;
L.data[11]=5;
L.data[12]=6;
L.length=13;
bool ret=DeleteList(L);
if(ret)
{
Print(L);
}
return 0;
}
运行结果:
0 1 2 3 4 5 6
Process finished with exit code 0