- 1.题目描述
- 2.算法实现
- 3.完整代码
- 4.运行结果
从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。
2.算法实现由于是有序表,那么可以知道如果值重复,那么一定是在一起的。可以定义两个变量i,j。i用于记录最后一个不重复的元素的下标,j用于遍历寻找不重复元素,,相同则j继续自增,直至找到下一个不重复,再进行上一步操作可以通过遍历,如果data[i]与data[j]不相同,则用下标为j的元素覆盖下标为i+1的元素,同时++i,最后修改length,算法完成。
// 算法实现
// 由于是有序表,那么可以知道如果值重复,那么一定是在一起的
// 可以定义两个变量i,j
// i用于记录最后一个不重复的元素的下标
// j用于遍历寻找不重复元素
// 即可以通过遍历,如果data[i]与data[j]不相同,则用下标为j的元素覆盖下标为i+1的元素,同时++i
// 相同则j继续自增,直至找到下一个不重复,再进行上一步操作
// 最后修改length,算法完成
bool delTheSameElement(SeqList &L) {
// 判空
if(Empty(L)) {
printf("the list is empty");
return false;
}
// i用于记录最后一个不重复的元素的下标
// j用于遍历寻找不重复元素
int i, j;
for(i = 0, j = 1;j < L.length;j++) {
// 若是不重复,则用下标为j的元素覆盖下标为i+1的元素,同时++i
if(L.data[i] != L.data[j]) {
// ++i表示先加1再起下标作用
L.data[++i] = L.data[j];
}
}
// i即为最后一个不重复的元素的下标,故将length修改为i+1
L.length = i + 1;
return true;
}
3.完整代码
#include4.运行结果#include #define InitSize 10 typedef struct { int *data; // 数据 int MaxSize; // 最大容量 int length; // 目前长度 } SeqList; // 初始化 void InitList(SeqList &L) { // 为了方便,这里选择初始化时填入1-10 // 申请10个整型的空间 L.data = (int *)malloc(InitSize * sizeof(int)); // 数据填入 for(int i = 0;i < InitSize;i+=2) { L.data[i] = i + 1; L.data[i + 1] = i + 1; } L.length = 10; L.MaxSize = InitSize; } // 判空操作 bool Empty(SeqList L) { // 直接根据长度判断即可 if(L.length == 0) { return true; } return false; } // 顺序表的输出操作 bool PrintList(SeqList L) { // 若表为空,则不能输出 if(Empty(L)) { return false; } // 循环遍历输出 for(int i = 0;i < L.length;i++) { printf("data[%d]=%dn", i, L.data[i]); } return true; } // 算法实现 // 由于是有序表,那么可以知道如果值重复,那么一定是在一起的 // 可以定义两个变量i,j // i用于记录最后一个不重复的元素的下标 // j用于遍历寻找不重复元素 // 即可以通过遍历,如果data[i]与data[j]不相同,则用下标为j的元素覆盖下标为i+1的元素,同时++i // 相同则j继续自增,直至找到下一个不重复,再进行上一步操作 // 最后修改length,算法完成 bool delTheSameElement(SeqList &L) { // 判空 if(Empty(L)) { printf("the list is empty"); return false; } // i用于记录最后一个不重复的元素的下标 // j用于遍历寻找不重复元素 int i, j; for(i = 0, j = 1;j < L.length;j++) { // 若是不重复,则用下标为j的元素覆盖下标为i+1的元素,同时++i if(L.data[i] != L.data[j]) { // ++i表示先加1再起下标作用 L.data[++i] = L.data[j]; } } // i即为最后一个不重复的元素的下标,故将length修改为i+1 L.length = i + 1; return true; } int main() { SeqList L; InitList(L); PrintList(L); printf("------------------------n"); delTheSameElement(L); PrintList(L); return 0; }



