删除顺序表中指定值的所有元素
时间: 2023-11-10 17:15:10 浏览: 32
假设顺序表为A,元素类型为int,要删除的值为value,可以按照以下步骤实现:
1. 定义两个指针i、j,i指向当前扫描的元素,j指向将要存储不等于value的元素的位置。
2. 从前向后扫描顺序表A,如果当前元素不等于value,则将其存储到j指向的位置,并将j向后移动一个位置。
3. 扫描完整个顺序表后,将j的值作为新的表长,即A的长度变为j,删除的元素数量为原表长减去新表长。
下面是具体的代码实现:
```c++
void deleteValue(int A[], int& n, int value) {
int i = 0, j = 0;
while (i < n) {
if (A[i] != value) {
A[j] = A[i];
j++;
}
i++;
}
n = j;
}
```
其中,n表示顺序表A的长度,传入函数时需要使用引用传递。
相关问题
第6关:删除顺序表中指定值的所有元素
算法思路:
1. 从顺序表的第一个元素开始,依次遍历每个元素;
2. 如果当前元素的值等于指定值,则将其删除;
3. 重复执行步骤1和步骤2,直到顺序表中不再有指定值。
Python 代码实现:
```python
def delete_all(lst, value):
i = 0
while i < len(lst):
if lst[i] == value:
lst.pop(i)
else:
i += 1
```
测试代码:
```python
lst = [1, 3, 5, 3, 2, 3, 4, 3]
delete_all(lst, 3)
print(lst) # [1, 5, 2, 4]
```
补充上述代码删除顺序表中指定值的所有元素
```
#include <stdio.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} List;
void delete(List *L, int x) {
int i, j;
for (i = 0, j = 0; i < L->length; i++) {
if (L->data[i] != x) {
L->data[j++] = L->data[i];
}
}
L->length = j;
}
int main() {
List L = {{1, 2, 3, 4, 5, 6, 7, 8, 9}, 9};
int x = 5;
printf("Before delete:\n");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
delete(&L, x);
printf("\nAfter delete:\n");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
return 0;
}
```