① 随机产生一组两位数整数,建立线性表的单向链式存储结构。 ② 实现该线性链表的遍历。 ③ 在该链表中查找某一元素,查找成功显示查找元素,否则显示查找失败。 ④ 在该链表中删除或插入指定元素。
时间: 2024-10-20 09:06:42 浏览: 34
首先,我们来创建一个随机生成两位数整数的线性链表并将其存储在单向链式结构中:
1. **创建链表结构**:
- 定义一个节点类,包含整数值(int value)和指向下一个节点的指针(Node* next)。
- 使用循环生成一个固定范围内的随机数,并创建新节点将它们链接起来。
```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
struct Node {
int value;
Node* next;
};
void createList(Node*& head) {
srand(time(0)); // 初始化随机种子
for (int i = 0; i < 10; ++i) { // 创建10个节点
int num = rand() % 90 + 10; // 随机两位数
Node* newNode = new Node{num, nullptr};
if (head == nullptr) {
head = newNode;
} else {
newNode->next = head;
head = newNode;
}
}
}
```
2. **链表遍历**:
- 我们可以定义一个辅助函数来遍历整个链表并打印节点值。
```cpp
void traverseList(Node* head) {
while (head != nullptr) {
std::cout << head->value << " -> ";
head = head->next;
}
std::cout << "NULL" << std::endl;
}
```
3. **查找元素**:
- 可以添加一个函数,接受一个目标值,从头开始逐个比较节点直到找到或到达链表尾部。
```cpp
bool searchElement(Node* head, int target) {
Node* current = head;
while (current != nullptr) {
if (current->value == target) {
std::cout << "找到了元素 " << target << std::endl;
return true;
}
current = current->next;
}
std::cout << "未找到元素 " << target << std::endl;
return false;
}
```
4. **插入或删除元素**:
- 插入操作可以先查找目标位置,然后插入新节点;删除操作则需定位到目标节点并更新前一节点的next指针。
```cpp
void insertElement(Node*& head, int value, int position) {
if (position <= 0) {
std::cout << "插入位置无效" << std::endl;
return;
}
Node* newNode = new Node{value, nullptr};
Node* prev = nullptr;
Node* current = head;
for (int i = 0; i < position - 1 && current != nullptr; ++i) {
prev = current;
current = current->next;
}
if (prev == nullptr) {
newNode->next = head;
head = newNode;
} else {
newNode->next = current;
prev->next = newNode;
}
}
void deleteElement(Node*& head, int target) {
if (head == nullptr || head->value != target) {
std::cout << "找不到要删除的元素 " << target << stdn::endl;
return;
}
Node* temp = head;
head = head->next;
delete temp;
}
```
阅读全文