题目
从有序表中删除所有其值重复的元素,使表中所有元素的值均不同。
算法思想
第一个元素(不重复)依次向后扫描,不重复就保留,重复(不保留)就删除所有重复元素
代码
bool Del_same(Sqlist* L){int i = 0,j = 0;if(L -> length == 0)return false;for(i = 0,j = 1; j < L -> length; j++){if(L->data[i] != L->data[j]){ i++;L->data[i] = L->data[j]; } }L->length = i + 1;return true;
}
运行代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MaxSize 10
int InitArr[10] = { 1,2,2,3,4,2,5,2,6,7 };typedef struct {int data[MaxSize];int length;
}Sqlist;void print(Sqlist* L)
{for (int i = 0;i < L->length;i++){printf("%d ", L->data[i]);}
}
void InitList(Sqlist* L)
{for (int i = 0;i < MaxSize;i++){L->data[i] = InitArr[i];}L->length = 10;
}
bool Del_t(Sqlist* L ,int s ,int t){int i = 0, k = 0;if (L -> length == 0 || s >= t)return false;for(i = 0; i < L -> length ; i++){if(L -> data[i] >= s && L -> data[i] <= t)k++;else L -> data[i-k] = L -> data[i];}L-> length = L->length - k;return true;
}
bool Del_same(Sqlist* L){int i = 0,j = 0;if(L -> length == 0)return false;for(i = 0,j = 1; j < L -> length; j++){if(L->data[i] != L->data[j]){ i++;L->data[i] = L->data[j];} }L->length = i + 1;return true;
}int main()
{Sqlist L;InitList(&L);printf("初始顺序表为:");print(&L);printf("\n"); Del_same(&L);printf("删除重复值后的元素后顺序表为:");print(&L);return 0;
}