集美大学课程实验报告-实验2:线性表
项目名称 | 内容 |
---|---|
课程名称 | 数据结构 |
班级 | 网安2411 |
指导教师 | 郑如滨 |
学生姓名 | 于鸿硕 |
学号 | 202421336018 |
实验项目名称 | 实验2:线性表 |
上机实践日期 | |
上机实践时间 | 2学时 |
一、目的(本次实验所涉及并要求掌握的知识点)
-
学习链表的创建方法 学习链表的逆置、插入和删除功能
二、实验内容与设计思想
#include <iostream>
using namespace std;return 0
题目1:头插法或尾插法创建链表
函数代码
//头插法:
void CreateListF(LinkList &L,int n)
{L=new LNode;L->next=nullptr;int inputdata;for(int i=0;i<n;i++){cin>>inputdata;LNode* newNode=new LNode;newNode->data=inputdata;newNode->next=L->next;L->next=newNode;}
}//尾插法:
void CreateListR(LinkList &L, int n)
{L=new LNode;L->next=nullptr;LNode *tail=L;int inputdata;for(int i=0;i<n;i++){cin>>inputdata;LNode *newNode=new LNode;newNode->data=inputdata;newNode->next=nullptr;tail->next=newNode;tail=newNode;}
}//输出链表:
void DispList(LinkList L)
{LNode* current=L->next;int a=0;while (current!=nullptr){a=1;cout<<current->data;if(current->next!=nullptr){cout<<" ";}current=current->next;}if(a==0)cout<<"空链表!";
}
**题目2:链表逆置*:
void ReverseList(LinkList &L)
{LNode *prev = nullptr;LNode *curr = L->next;LNode *next = nullptr;while (curr != nullptr) {next = curr->next;curr->next = prev;prev = curr;curr = next;}L->next = prev;
}
题目3:有序链表的插入与删除:
void ListInsert(LinkList &L,ElemType e)
{LNode *pre=L;LNode *p=L->next;while(p!=nullptr&&p->data<e){pre=p=p;p=p->next;}LNode *newNode=new LNode;newNode->data=e;newNode->next=p;pre->next=newNode;
}void ListDelete(LinkList &L,ElemType e)
{LNode *pre=L;LNode *p=L->next;while (p!=nullptr&&p->data!=e){pre = p;p = p->next;}if(p!=nullptr){pre->next=p->next;delete p;}else{cout<<e<<"找不到!"<<endl;}
}
三、实验使用环境(本次实验所使用的平台和相关软件)
以下请根据实际情况编写
- 操作系统:Windows 11
- 编程语言:C++
- 开发工具:visual studio2022 &pintia
- 编译器:g++
四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)
题目1:头插法和尾插法运行截图
本机运行截图
PTA提交截图
题目2:链表逆置运行截图:
题目3:有序链表的插入与删除:
五、实验小结(实验中遇到的问题及解决过程、实验体会和收获)
遇到的问题及解决方法:
在删除链表元素这题中,链表全删情况需要在最后输出“空链表”,但我在编写代码中通过在删除函数中加入验证temp=null时会重复输出n次,而如果要实现只输出一次,按照我的理解应该要在displist函数里加入相关代码,但强加该函数会导致编译错误,该问题尚未解决
实验体会和收获:
学习了链表的两种创建方式,学习了有序链表的插入和删除元素,学习了链表通过迭代逆置的方法