1.从有序表中删除所有值重复的元素,使所有值均不同
#include
#define MaxSize 50
#define Elemtype int
typedef struct{
Elemtype data[MaxSize];
int length;
}SqList;
bool ListInsert(SqList &L,int i,Elemtype e){
if(i<1||i>L.length+1)
return false;
if(L.length>=MaxSize)
return false;
for (int j=L.length;j>=i;j--){
L.data[j]=L.data[j-1];
}
L.data[i-1]=e;
L.length++;
return true;
}
bool ListDelete(SqList &L,int i,Elemtype e){
if(i<1||i>L.length)
return false;
e=L.data[i-1];
for (int j=i;j1]=L.data[j];
L.length--;
return true;
}
void PrintList(SqList L){
for(int i=0;iprintf("%d",L.data[i]);
}
printf("\n");
}
bool Delet_Same(SqList &L){
int k=0;
for (int i=1;i<=L.length;i++){
if(L.data[i]!=L.data[k])
k++;
L.data[k]=L.data[i];
}
L.length=k;
return true;
}
int main(){
SqList L;
ListInsert(L,1,1);
ListInsert(L,2,2);
ListInsert(L,3,2);
ListInsert(L,4,2);
ListInsert(L,5,2);
ListInsert(L,6,3);
ListInsert(L,7,4);
ListInsert(L,8,4);
ListInsert(L,9,5);
PrintList(L);
Delet_Same(L);
PrintList(L);
return 0;
}
2.若修改为无序列表,可用Hash实现,具体代码为
#include
#define MaxSize 50
#define Elemtype int
typedef struct{
Elemtype data[MaxSize];
int length;
}SqList;
int hashTable[MaxSize]={0};
bool ListInsert(SqList &L,int i,Elemtype e){
if(i<1||i>L.length+1)
return false;
if(L.length>=MaxSize)
return false;
for (int j=L.length;j>=i;j--){
L.data[j]=L.data[j-1];
}
L.data[i-1]=e;
L.length++;
return true;
}
bool ListDelete(SqList &L,int i,Elemtype e){
if(i<1||i>L.length)
return false;
e=L.data[i-1];
for (int j=i;jlength;j++)
L.data[j-1]=L.data[j];
L.length--;
return true;
}
void PrintList(SqList L){
for(int i=0;ilength;i++){
printf("%d",L.data[i]);
}
printf("\n");
}
bool Delet_Same(SqList &L){
int k=0;
for (int i=1;i<=L.length;i++){
if(L.data[i]!=L.data[k])
k++;
L.data[k]=L.data[i];
}
L.length=k;
return true;
}
/*
int hashTableInit(SqList L,int &hashTable){
for (int i=0;ilength;i++)
hashTable[L.data[i]]++;
return 0;
}
bool Delete_hash(SqList &L,int hashTable){
int k=0;
for (int i=0;ilength;i++){
if(hashTable[L.data[i]]==1){
L.data[k]=L.data[i];
k++;
}
else{
L.data[k]=L.data[i];
}
}
return true;
}
*/
int main(){
SqList L;
ListInsert(L,1,1);
ListInsert(L,2,5);
ListInsert(L,3,6);
ListInsert(L,4,2);
ListInsert(L,5,6);
ListInsert(L,6,3);
ListInsert(L,7,4);
ListInsert(L,8,4);
ListInsert(L,9,5);
PrintList(L);
//Delet_Same(L);
for (int i=0;ilength;i++)
hashTable[L.data[i]]++;
int k=0;
for (int j=0;jlength;j++){
if(hashTable[L.data[j]]!=0){
L.data[k]=L.data[j];
hashTable[L.data[j]]=0;
k++;
}
}
L.length=k;
PrintList(L);
return 0;
}