已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为0(n)、空间复杂度为0(1)的算法,该算法删除线性表中所有值为item的数据元素。根据 void Delete (ElemType A[ ]. int n) 写出该程序
时间: 2023-03-28 10:00:55 浏览: 268
已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同)
可以使用双指针法来实现时间复杂度为O(n)、空间复杂度为O(1)的删除算法。
具体实现步骤如下:
1. 定义两个指针i和j,初始值均为。
2. 从头开始遍历线性表A,当A[i]不等于item时,将A[i]赋值给A[j],同时i和j均加1。
3. 当A[i]等于item时,i加1,跳过该元素。
4. 最后将j的值赋给n,即可删除所有值为item的数据元素。
下面是对应的程序实现:
void Delete(ElemType A[], int n, ElemType item) {
int i = , j = ;
while (i < n) {
if (A[i] != item) {
A[j] = A[i];
j++;
}
i++;
}
n = j;
}
阅读全文