一、操作要求
根据输入表的长度m和m个非递减的有序整数建立一个有序顺序表和有序单链表,然后有尽量高效的方法删除其中所有的重复元素(即相同的整数只保留一个) 最后输出删除后的表中各元素值。
二、代码实现
Status SqL_DeleteDuplicate(SqList &L){
int i,k;
printf("请输入顺序表长度:");
scanf("%d",&L.length);
printf("请输入顺序表各个元素:\n");
for (int i=0;i<L.length;i++)
scanf("%d",&L.elem[i]);
for(i=1,k=0;i<L.length;i++)//k初始为表头,i初始为表头的后驱
if(L.elem[k]!=L.elem[i])
L.elem[++k]=L.elem[i];
L.length=k+1;
return OK;
} //顺序表删除重复元素
Status Link_DeleteDuplicate(LinkList &S)
{
LinkList p=S->next;
while(p&&p->next){
LinkList q=p->next;
if(p->data==q->data)//一定要看清!!是==
{
p->next=q->next;
free(q);
}
else
p=p->next;
}
return OK;
}//单链表删除重复元素