C++ 设单链表的结点是按关键字的值从小到大排列的,试写出对此表的查找程序并调试 代码
时间: 2023-12-10 22:42:16 浏览: 89
以下是一个简单的单链表查找程序,其中节点按关键字值从小到大排列:
```cpp
#include <iostream>
using namespace std;
struct Node {
int key;
Node* next;
};
Node* search(Node* head, int key) {
Node* p = head->next;
while (p != nullptr && p->key < key) {
p = p->next;
}
if (p == nullptr || p->key != key) {
return nullptr;
}
return p;
}
int main() {
Node* head = new Node{0, nullptr}; // 创建头节点
Node* p = head;
for (int i = 1; i <= 10; ++i) { // 创建有序链表
Node* node = new Node{i, nullptr};
p->next = node;
p = node;
}
cout << "请输入要查找的关键字:";
int key;
cin >> key;
Node* result = search(head, key);
if (result == nullptr) {
cout << "未找到" << endl;
} else {
cout << "已找到,关键字为" << result->key << endl;
}
return 0;
}
```
上面程序中的 `search` 函数接受一个头节点和一个关键字值,返回指向表中第一个关键字值等于给定值的节点的指针。如果找不到,返回 `nullptr`。
在 `search` 函数中,我们使用 `while` 循环遍历链表,直到找到关键字值大于等于给定值的节点或者遍历到链表的结尾。如果找到了一个关键字值等于给定值的节点,就返回该节点的指针。如果遍历到链表的结尾还没有找到,就返回 `nullptr`。
在 `main` 函数中,我们创建了一个有序链表,并从标准输入读取要查找的关键字值。然后调用 `search` 函数查找该关键字值,并输出结果。
下面是一组调试运行的结果:
```
请输入要查找的关键字:5
已找到,关键字为5
```
```
请输入要查找的关键字:11
未找到
```
阅读全文