集美大学课程实验报告-实验2:线性表
集美大学课程实验报告-实验2:线性表
| 项目名称 | 内容 |
|---|---|
| 课程名称 | 数据结构 |
| 班级 | 网安2413 |
| 指导教师 | 郑如滨 |
| 学生姓名 | 许晴 |
| 学号 | 202421336069 |
| 实验项目名称 | |
| 上机实践日期 | |
| 上机实践时间 | 2学时 |
一、目的(本次实验所涉及并要求掌握的知识点)
-
- 熟悉顺序表的定义及其上的常用操作。
-
- 熟悉链表的定义及其上的常用操作
-
- 掌握使用Visual Studio的调试功能查看链表中的内容。
二、实验内容与设计思想
题目1:区间删除
函数相关伪代码
// 定义链表节点结构
// 创建顺序表
void CreateList(SqList &L, int n)
L->length = 0
For i From 0 To n - 1
输入元素data
L->data[i] = data
L->length = n
End
// 删除区间元素
void DelNode(SqList &L, int min, int max)
int k = 0
For i From 0 To L->length - 1
If L->data[i] < min Or L->data[i] > max
L->data[k] = L->data[i]
k = k + 1
L->length = k
End
// 输出顺序表
void DispList(SqList L)
If L->length == 0
Return
For i From 0 To L->length - 2
输出 L->data[i] + " "
输出 L->data[L->length - 1]
End
函数代码
void CreateList(SqList &L, int n) {
L = new List;
L->length = n;
for (int i = 0; i < n; i++) {
cin >> L->data[i];
}
}
void DelNode(SqList& L, int min, int max) {
int i = 0, j = 0;
while (L->length > i) {
if (L->data[i]<min || L->data[i]>max) {
L->data[j] = L->data[i];
j++;
}
i++;
}
L->length = j;
}
void DispList(SqList L) {
int i = 0;
if (L->length == 0) {
cout << "线性表为空!";
}
else {
cout << L->data[i];
i++;
while (i < L->length) {
cout << " " << L->data[i];
i++;
}
}
}
题目2:头插法或尾插法创建链表
函数相关伪代码
//创建链表
L = new Node(); // 创建头结点
L->next = NULL; // 初始化
for (int i = 0; i < n; i++) {
Node *newNode = new Node(); // 创建新的节点
cin >> newNode->data; // 从标准输入读取数据
newNode->next = L->next;
L->next = newNode;
}
// 输出链表
Node *current = L->next; // 从头结点的下一个节点开始遍历
while (current != NULL) {
cout << current->data << " "; // 输出当前节点的数据
current = current->next; // 移动到下一个节点
}
cout << endl; // 输出换行符
函数代码
void CreateListF(LinkList &L,int n)//头插法建链表,L表示带头结点链表,n表示数据元素个数
{
L = new LNode;
L->next = nullptr;
ElemType val;
for (int i = 0; i < n; ++i) {
cin >> val;
LNode* newNode = new LNode;
newNode->data = val;
newNode->next = L->next;
L->next = newNode;
}
}
void DispList(LinkList L)//输出链表
{
LinkList p = L->next;
if (!p) {
cout << "空链表!";
return;
}
cout << p->data;
p = p->next;
while (p) {
cout << " " << p->data;
p = p->next;
}
}
题目3:单链表的逆置
函数相关伪代码
// 逆置链表函数
Node* p = L->next;
Node* q;
L->next = NULL;
while (p!= NULL) {
q = p->next;
p->next = L->next;
L->next = p;
p = q;
}
函数代码
void ReverseList(LinkList &L) {
if (L->next == nullptr) {
return;
}
LinkList p = L->next;
LinkList q;
L->next = nullptr;
while (p != nullptr) {
q = p->next;
p->next = L->next;
L->next = p;
p = q;
}
}
三、实验使用环境(本次实验所使用的平台和相关软件)
以下请根据实际情况编写
- 操作系统:Windows 11 professional
- 编程语言:C++
- 开发工具:[Visual Studio 2022]
四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)
题目1:区间删除
本机运行截图

PTA提交截图

题目2:头插法或尾插法创建链表
本机运行截图

PTA提交截图

题目3:单链表逆置
本机运行截图

PTA提交截图

五、实验小结(实验中遇到的问题及解决过程、实验体会和收获)
遇到的问题及解决方法:
- 问题:代码在vs上无法运行。
- 解决方法:检查代码发现函数代码不完整,完整代码后解决问题。
- 问题:伪代码具体格式怎么写
- 解决方法:借助AI,理解后自己书写。
实验体会和收获:
- 借助AI解决问题
- 掌握了基本的代码调试方法。
六、附件(参考文献和相关资料)
以下请根据实际情况编写
- 数据结构
- 实验2-线性表

浙公网安备 33010602011771号