已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法可删除线性表中所有值为item的数据元素。
时间: 2024-05-19 17:13:43 浏览: 93
已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同)
1. 初始化两个指针,i指向第一个元素,j指向最后一个元素。
2. 从前往后遍历线性表,如果当前元素不等于item,将该元素复制到i所指向的位置,并将i向后移动一位。
3. 重复步骤2,直到遍历完整个线性表。
4. 将i所指向的位置及其后面的元素全部删除,即将线性表的长度更新为i。
5. 将j向前移动一位,重复步骤2、3、4,直到j指向i为止。
代码实现:
void deleteAll(int A[], int n, int item) {
int i = 0, j = n - 1;
while (i <= j) {
if (A[i] == item) {
A[i] = A[j];
j--;
} else {
i++;
}
}
n = i;
}
阅读全文