本关任务:编写一个函数实现链表表的清空。 函数原型:status ClearList(SqList &L) 功能说明:若链表L不存在,返回INFEASIBLE。否则清空链表L,返回OK;
时间: 2023-07-12 09:24:29 浏览: 53
好的,让我来帮你编写这个函数。
根据你提供的函数原型,我猜测你使用的是链式存储结构实现链表。那么清空链表就是将表中的所有节点都删除,将头节点的指针指向NULL。
以下是函数的实现代码:
```c++
typedef struct LNode {
ElemType data; // 数据域
struct LNode *next; // 指针域
} LNode, *LinkList;
status ClearList(LinkList &L) {
if (!L) { // 链表不存在
return INFEASIBLE;
}
LNode *p = L->next; // p指向第一个节点
while (p) { // 循环遍历链表
LNode *q = p->next; // q指向下一个节点
free(p); // 释放当前节点的内存
p = q; // p指向下一个节点
}
L->next = NULL; // 头节点指针指向NULL
return OK;
}
```
首先判断链表是否存在,即头节点是否为空指针。如果为空指针,说明链表不存在,返回 `INFEASIBLE`。否则,使用指针 `p` 指向第一个节点,循环遍历链表,使用指针 `q` 指向下一个节点,释放当前节点的内存,直到遍历完整个链表。最后将头节点的指针指向NULL,返回 `OK`。
相关问题
用c++表示解决数据结构问题:建立一个20个以上数据的有序顺序表表中可以仅存放记录的关键字,实现对该有序表的折半查找算法
好的,以下是用 C++ 实现折半查找算法的代码:
```cpp
#include <iostream>
using namespace std;
const int MAX_SIZE = 100;
int a[MAX_SIZE] = {3, 6, 8, 11, 18, 21, 24, 27, 29, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66};
int binarySearch(int key, int low, int high) {
while (low <= high) {
int mid = (low + high) / 2;
if (a[mid] == key) {
return mid;
} else if (a[mid] > key) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
int main() {
int key;
cout << "请输入要查找的数字: ";
cin >> key;
int index = binarySearch(key, 0, 20);
if (index == -1) {
cout << "未找到该数字!" << endl;
} else {
cout << "数字 " << key << " 在第 " << index + 1 << " 个位置" << endl;
}
return 0;
}
```
上述代码中,使用数组 `a` 存储有序表的数据,其中 `binarySearch` 函数为折半查找算法的实现,`key` 为要查找的数字,`low` 和 `high` 分别为有序表的起始位置和终止位置。最后根据查找结果输出相应的信息。
在单链表表中,若p结点不是尾结点,在其后插入s结点的操作
可以通过以下步骤实现在单链表中插入结点的操作:
1. 将s结点的next指针指向p结点的next指针所指向的结点。
2. 将p结点的next指针指向s结点。
这样就可以在单链表中在p结点后插入s结点了。