最简单的方法完成 Status ListDelete_Sq(SqList *L,int i,ElemType *e)函 数,实现顺序表的元素删除
时间: 2024-09-15 20:09:09 浏览: 49
`Status ListDelete_Sq(SqList *L, int i, ElemType *e)` 函数的作用是从给定顺序列表 `L` 中删除指定索引 `i` 的元素,并将该元素的值保存到指针 `e` 所指向的位置。如果成功删除,函数通常会返回 `OK` 或 `SUCCESS` 状态;若未找到指定位置或列表为空,则可能返回错误状态。
这里是一个简单的实现步骤:
1. 检查输入是否有效:首先检查 `L` 是否为非空的顺序表,以及 `i` 是否在合法范围内(即 0 <= i < L->length)。
```c
if (!L || i < 0 || i >= L->length) {
return ERROR;
}
```
2. 如果 `i` 等于 0,直接更新头节点(如果有头节点的话),并将头指针指向下一个元素。
```c
if (i == 0) {
if (L->next) {
L = L->next;
} else {
return ERROR; // 链表只剩最后一个元素,无法删除
}
}
```
3. 如果 `i` 不等于 0,遍历列表寻找第 `i` 个元素并更新指针。
```c
for (int j = 0; j < i; ++j) {
L = L->next;
}
// 当前指针 `L` 现在指向需要删除的元素的前一个节点
```
4. 删除元素:释放当前元素的内存,然后将前一个节点的 `next` 指针指向 `i+1` 位置的元素,以便跳过已删除项。
```c
L->next = L->next->next;
free(L->data); // 释放删除元素的内存
L->data = NULL; // 更新数据域,表示已被删除
```
5. 返回结果:函数正常结束,返回 `OK` 或 `SUCCESS`。
```c
return OK;
```
阅读全文