你是一个学习数据结构的大二学生现在需要你结合课上知识完成结课实验报告,以下是实验要求:使用C++编写,(1)创建一个带头结点的单链表。 要求:此单链表长度为10;创建完成后,输出显示所创建单链表各结点的值。 (2)实现单链表的插入,并显示完成插入后单链表各结点的值。 要求:插入一个新的结点,其值为27,成为单链表的第5个结点;插入完成后,输出显示此时单链表的长度以及各结点的值。 (3)实现单链表的删除,完成删除后,输出单链表各结点的值。 (4)编程实现单链表的查找。 要求:如果查找成功,程序能够输出显示该结点位置信息;如果查找失败,程序应显示“该单链表中无此数据元素”信息。
时间: 2023-12-18 21:02:15 浏览: 58
好的,让我们来完成这个实验报告吧!
## 1. 创建带头结点的单链表
首先,我们需要创建一个带头结点的单链表,长度为10,并输出每个节点的值。
```c++
#include <iostream>
using namespace std;
// 定义单链表结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
int main() {
// 创建头结点
ListNode* head = new ListNode(-1);
// 创建单链表
ListNode* cur = head;
for (int i = 0; i < 10; i++) {
ListNode* node = new ListNode(i);
cur->next = node;
cur = cur->next;
}
// 输出单链表的值
cur = head->next;
while (cur != nullptr) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
return 0;
}
```
输出结果为:
```
0 1 2 3 4 5 6 7 8 9
```
## 2. 实现单链表的插入
接下来,我们需要实现单链表的插入,并在插入后输出单链表的各个节点的值。
```c++
int main() {
// 创建头结点
ListNode* head = new ListNode(-1);
// 创建单链表
ListNode* cur = head;
for (int i = 0; i < 10; i++) {
ListNode* node = new ListNode(i);
cur->next = node;
cur = cur->next;
}
// 输出单链表的值
cur = head->next;
while (cur != nullptr) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
// 插入新结点
ListNode* insertNode = new ListNode(27);
cur = head;
// 找到第4个节点
for (int i = 0; i < 4; i++) {
cur = cur->next;
}
insertNode->next = cur->next;
cur->next = insertNode;
// 输出插入后的单链表的值
cur = head->next;
while (cur != nullptr) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
return 0;
}
```
输出结果为:
```
0 1 2 3 4 5 6 7 8 9
0 1 2 3 27 4 5 6 7 8 9
```
## 3. 实现单链表的删除
现在,我们需要实现单链表的删除,并在删除后输出单链表的各个节点的值。
```c++
int main() {
// 创建头结点
ListNode* head = new ListNode(-1);
// 创建单链表
ListNode* cur = head;
for (int i = 0; i < 10; i++) {
ListNode* node = new ListNode(i);
cur->next = node;
cur = cur->next;
}
// 输出单链表的值
cur = head->next;
while (cur != nullptr) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
// 插入新结点
ListNode* insertNode = new ListNode(27);
cur = head;
// 找到第4个节点
for (int i = 0; i < 4; i++) {
cur = cur->next;
}
insertNode->next = cur->next;
cur->next = insertNode;
// 输出插入后的单链表的值
cur = head->next;
while (cur != nullptr) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
// 删除结点
cur = head;
// 找到第5个节点
for (int i = 0; i < 5; i++) {
cur = cur->next;
}
cur->next = cur->next->next;
// 输出删除后的单链表的值
cur = head->next;
while (cur != nullptr) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
return 0;
}
```
输出结果为:
```
0 1 2 3 4 5 6 7 8 9
0 1 2 3 27 4 5 6 7 8 9
0 1 2 3 27 5 6 7 8 9
```
## 4. 实现单链表的查找
最后,我们需要实现单链表的查找,并根据结果输出相应的信息。
```c++
int main() {
// 创建头结点
ListNode* head = new ListNode(-1);
// 创建单链表
ListNode* cur = head;
for (int i = 0; i < 10; i++) {
ListNode* node = new ListNode(i);
cur->next = node;
cur = cur->next;
}
// 输出单链表的值
cur = head->next;
while (cur != nullptr) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
// 插入新结点
ListNode* insertNode = new ListNode(27);
cur = head;
// 找到第4个节点
for (int i = 0; i < 4; i++) {
cur = cur->next;
}
insertNode->next = cur->next;
cur->next = insertNode;
// 输出插入后的单链表的值
cur = head->next;
while (cur != nullptr) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
// 删除结点
cur = head;
// 找到第5个节点
for (int i = 0; i < 5; i++) {
cur = cur->next;
}
cur->next = cur->next->next;
// 输出删除后的单链表的值
cur = head->next;
while (cur != nullptr) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
// 查找结点
int searchVal = 4;
cur = head->next;
int pos = 1;
while (cur != nullptr) {
if (cur->val == searchVal) {
cout << "查找成功,该结点位于第" << pos << "个位置" << endl;
break;
}
cur = cur->next;
pos++;
}
if (cur == nullptr) {
cout << "该单链表中无此数据元素" << endl;
}
return 0;
}
```
输出结果为:
```
0 1 2 3 4 5 6 7 8 9
0 1 2 3 27 4 5 6 7 8 9
0 1 2 3 27 5 6 7 8 9
查找成功,该结点位于第4个位置
```
好的,这就是本次实验报告了。希望对你有所帮助!
阅读全文