数据结构实验2——线性表
集美大学课程实验报告-实验2:线性表
| 项目名称 | 内容 |
|---|---|
| 课程名称 | 数据结构 |
| 班级 | 网安XXX |
| 指导教师 | 郑如滨 |
| 学生姓名 | 王鑫杰 |
| 学号 | 47 |
| 实验项目名称 | 线性表 |
| 上机实践日期 | 3月12日 |
| 上机实践时间 | 2学时 |
一、目的(本次实验所涉及并要求掌握的知识点)
- 熟悉顺序表的定义及其上的常用操作。
- 熟悉链表的定义及其上的常用操作
- 掌握使用Visual Studio的调试功能查看链表中的内容。
- 学习区间删除,头插法,尾插法的实现与优化。
- 理解数据结构在实际问题中的应用。
二、实验内容与设计思想
题目1:区间删除
函数相关伪代码
void CreateList(SqList &L,int n)//(创建链表将数据填入并记录长度)
{
创建新链表L;
线性表的长度等于n;
循环将给出数据填入线性表中;
}
void DelNode(SqList &L,int min,int max)//删除区间中的数;
{
int i=0;
for(int j=0;j<n;j++)
{
if(值>max ||值<min)
L->data[i] = L->data[j];
i++;
}
线性表长度等于i;
}
void DispList(SqList L)
{
if(线性表长度为0) cout<<"线性表为空!";
for(int i=0;i<L->length;i++)
{
if(i==0) cout<<L->data[i];
else cout<<" "<<L->data[i];
}
cout<<endl;
}
函数代码
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;
for(i=0;i<L->length;i++)
{
if(L->data[i]>max||L->data[i]<min)
{
L->data[j]=L->data[i];
j++;
}
}
L->length=j;
}
void DispList(SqList L)
{
if(L->length==0) cout<<"线性表为空!";
for(int i=0;i<L->length;i++)
{
if(i==0) cout<<L->data[i];
else cout<<" "<<L->data[i];
}
cout<<endl;
}
题目2:头插法或尾插法创建链表
函数相关伪代码
void CreateListF(LinkList& L, int n)//将数据用头插法的方式录入栈中。
{
L = new LNode;
L的指针指向NULL;
for(int i=0;i<n;i++){
LinkList p = new LNode;
将数据录入p中的data;
将p的指针和L的指针指向同一个位置;
L->next = p;
}
}
void DispList(LinkList L)//将栈中的数输出。
{
新建一个Lnode*s = L->next;
if(s为NULL) {
cout << "空链表!";
}
else
{
cout << s->data;
s = s->next;
while (s)
{
cout << " " << s->data;
s = s->next;
}
}
cout << endl;
}
void CreateListR(LinkList& L, int n)//尾插法建链表,L表示带头结点链表,n表示数据元素个数
{
L = new LNode;
L->next = NULL;
LNode* r = L;
for (int i = 0; i < n; i++) {
ElemType m;
cin >> m;
LinkList p = new LNode;
p->data = m;
p->next = NULL;
r->next = p;
r = p;
}
}
函数代码
void CreateListF(LinkList& L, int n){
L = new LNode;
L->next = NULL;
for(int i=0;i<n;i++){
ElemType m;
cin >> m;
LinkList p = new LNode;
p->data = m;
p->next = L->next;
L->next = p;
}
}
void DispList(LinkList L)
{
LNode* s = L->next;
if(!s) {
cout << "空链表!";
}
else
{
cout << s->data;
s = s->next;
while (s)
{
cout << " " << s->data;
s = s->next;
}
}
cout << endl;
}
void CreateListR(LinkList& L, int n)//尾插法建链表,L表示带头结点链表,n表示数据元素个数
{
L = new LNode;
L->next = NULL;
LNode* r = L;
for (int i = 0; i < n; i++) {
ElemType m;
cin >> m;
LinkList p = new LNode;
p->data = m;
p->next = NULL;
r->next = p;
r = p;
}
}
三、实验使用环境(本次实验所使用的平台和相关软件)
- 操作系统:Windows 10
- 编程语言:C++
- 开发工具:Visual Studio 2022
四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)
题目1:区间删除
本机运行截图

PTA提交截图

题目2:头插法
本机运行截图

PTA提交截图

题目3:尾插法
本机运行截图

PTA提交截图

五、实验小结(实验中遇到的问题及解决过程、实验体会和收获)
遇到的问题及解决方法:
- 问题:运行时显示内存分配异常。
- 解决方法:再建立一个指针指向线性表。
- 问题:当线性表为空时不输出“线性表为空!”
- 解决方法:再建立一个指针指向线性表。
实验体会和收获:
- 学会了如何使用Visual Stdio 2022.
- 掌握了基本的代码调试方法。
- 学会Markdown的写法。
六、附件(参考文献和相关资料)
1.数据结构课本
浙公网安备 33010602011771号