题目:从有序顺序表中删除所有其值重复的元素,使表中所有元素的值均不同。
思路:因为是有序数组,所有不必每次比较都从头开始,利用双指针的思想,一个遍历,一个获取满足条件的值即可。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define InitSize 10
typedef struct {
int* data;
int length;
int MaxSize;
}SeqList;
void InitList(SeqList* L) {
L->data = (int*)malloc(sizeof(int) * InitSize);
L->length = 0;
L->MaxSize = InitSize;
}
bool DelRepeatElem(SeqList* L) {
if (L->length == 0)
return false;
int i = 0;
L->data[i] = L->data[0];
for (int j = 1; j < L->length; j++) {
if (L->data[j] != L->data[i]) {
L->data[++i] = L->data[j];
}
}
L->length = i+1;
return true;
}
int main()
{
SeqList L;
InitList(&L);
for (int i = 0; i < L.MaxSize; i++) {
scanf("%d", &L.data[i]);
L.length++;
}
if (DelRepeatElem(&L)) {
for (int i = 0; i < L.length; i++)
printf("%d ", L.data[i]);
}
return 0;
}