莱芜益寿堂网站百度怎么找人工客服
题目描述:从有序顺序表中删除所有其值重复的元素,使其中所有元素的值均不同
算法思想:
输入检查:若顺序表为空或指针为空,返回false。
双指针覆盖法:
使用指针k标记保留元素的末尾,初始位置为0。
遍历顺序表(从i=1开始),若当前元素data[i]不等于data[k],则将其保留到k+1位置,并更新k。
更新表长:遍历结束后,表长设为k+1,直接截断后续元素。
复杂度分析:时间复杂度O(n)空间复杂度O(1)
代码实现:
#include <stdbool.h>
#define MAXSIZE 100 // 假设顺序表最大容量typedef struct {int data[MAXSIZE];int length;
} SeqList;bool DeleteDuplicates(SeqList *L) {// 检查空指针或空表if (L == NULL || L->length == 0) {return false;}int k = 0; // 保留元素的末尾索引for (int i = 1; i < L->length; i++) {// 若当前元素与前一个保留元素不同,则保留if (L->data[i] != L->data[k]) {L->data[++k] = L->data[i]; // 先递增k,再赋值}}L->length = k + 1; // 新表长为k+1return true;
}