问题描述:从有序表中删除所有值重复的元素,使表中元素均不同。
算法设计思路:因为是顺序表,所以相同的元素一定在连续的位置上。基于此,初始时,将第一个元素看做是非重复的有序表,之后依次判断后面的元素是否与前面非重复有序表的最后一个元素相同,若相同则继续向后判断,不相同则插入到前面的非重复有序表的最后,直至判断结束为止。
代码及结果:
#include<stdio.h> #include "线性表的顺序表示和实现.cpp" bool Del_Same(SqList &L){ //删除有序顺序表中值重复的元素 if(L.length == 0) return false; //表L不合理 int j = 0; //j指向的是非重复有序表的最后一个位置 for(int i = 1;i < L.length;i++){ if(L.data[i] != L.data[j]) L.data[++j] = L.data[i];//将与最后一个元素不相同的元素插入到非重复有序表中 } L.length = j + 1; return true; } int main(){ //main SqList L; //定义一个顺序表 int e; bool flag = InitList_Sq(L); if(flag) printf("构造空的顺序表成功!\n"); else printf("构造顺序表失败!\n"); printf("依次输入要往线性表中输入的元素:"); int i = 0; while(scanf("%d",&e)!=EOF){ ListInsert_Sq(L,++i,e); } printf("顺序表中现有的数据为:"); PrintList(L); printf("删除相同元素后顺序表为:"); Del_Same(L); PrintList(L); return 0; }