版权声明: https://blog.csdn.net/geeksoarsky/article/details/83590997
翠花上代码:
Status delExcrescentValue(SeqList &S){
int flag = 0,val = S.elem[0];//记录值不等的下标
//printf("%d\n",S.elem[0]);
for(int i = 1;i<=S.last;i++){
if(val != S.elem[i]){
val = S.elem[i];
flag+=1;
S.elem[flag] = val;
printSeqList(S);
}
}
S.last = flag;
return OK;
}
算法分析:要求时间复杂度O(n),空间复杂度为O(1),所以只能出现一个 for 循环,而且只能在原表的内存空间操作;
定义变量 flag 始终为遍历顺序表的过程中不等元素里的最新元素的下标,(同时它也是最大元素由于是非递减顺序表);
定义变量 val 存储的是遍历顺序表的过程中不等元素里的最新元素的,用 val 和遍历顺序表过程中的其他元素 S.elem[i] 比较,如果不等,就把这个元素 S.elem[i] 放到 S.elem[flag] 元素的下一个位置 ,所以要把 flag 加1,最后把顺序表长度减短就行了,也就是把 flag 赋值给 S.last ;
ps:S.last 存储的是顺序表最后一个元素的下标,S.last+1 就是顺序表的长度