数据结构顺序表删除元素线性表
时间: 2023-10-13 11:05:08 浏览: 71
对于顺序表,删除元素可以分为两种情况:删除指定位置的元素和删除指定值的元素。
1. 删除指定位置的元素:
首先判断要删除的位置是否合法。如果位置超出了表的范围,则无法删除。
如果位置合法,则将该位置后面的元素向前移动一位,并将表的长度减1。
2. 删除指定值的元素:
遍历整个顺序表,找到第一个等于指定值的元素,并记录其位置。
如果找到了该元素,则将该位置后面的元素向前移动一位,并将表的长度减1。
如果未找到该元素,则表示顺序表中不存在该值。
下面是一个示例代码,演示了如何在顺序表中删除指定位置或指定值的元素:
```cpp
#include <iostream>
using namespace std;
// 定义顺序表结构体
struct SeqList {
int* data; // 用于存储数据的数组
int length; // 当前存储的元素个数
int capacity; // 顺序表的容量
};
// 初始化顺序表
void initSeqList(SeqList& list, int capacity) {
list.data = new int[capacity];
list.length = 0;
list.capacity = capacity;
}
// 删除指定位置的元素
bool deleteAt(SeqList& list, int pos) {
if (pos < 0 || pos >= list.length) {
return false; // 位置非法,删除失败
}
for (int i = pos + 1; i < list.length; i++) {
list.data[i - 1] = list.data[i];
}
list.length--;
return true;
}
// 删除指定值的元素
bool deleteValue(SeqList& list, int value) {
int pos = -1; // 记录要删除的位置
for (int i = 0; i < list.length; i++) {
if (list.data[i] == value) {
pos = i;
break;
}
}
if (pos != -1) {
return deleteAt(list, pos); // 调用 deleteAt 删除指定位置的元素
} else {
return false; // 指定值不存在,删除失败
}
}
// 输出顺序表中的元素
void printSeqList(const SeqList& list) {
for (int i = 0; i < list.length; i++) {
cout << list.data[i] << " ";
}
cout << endl;
}
// 测试代码
int main() {
SeqList list;
initSeqList(list, 10);
// 插入一些元素
for (int i = 0; i < 5; i++) {
list.data[i] = i + 1;
list.length++;
}
// 输出顺序表
cout << "顺序表当前元素:" << endl;
printSeqList(list);
// 删除指定位置的元素
int pos = 2;
if (deleteAt(list, pos)) {
cout << "成功删除位置 " << pos << " 的元素:" << endl;
printSeqList(list);
} else {
cout << "删除位置 " << pos << " 的元素失败" << endl;
}
// 删除指定值的元素
int value = 4;
if (deleteValue(list, value)) {
cout << "成功删除值为 " << value << " 的元素:" << endl;
printSeqList(list);
} else {
cout << "删除值为 " << value << " 的元素失败" << endl;
}
return 0;
}
```
希望以上示例代码能帮助到你!