武汉理工大学数据结构课内实验


前言

本文要记录的大概内容:
笔者在大二上学期所学的数据结构课程的课内实验,分享自己的思路,提供给大家参考。

主要仪器设备及耗材

1.安装了Windows 10操作系统的PC机1台
2.PC机系统上安装了Microsoft Visual Studio 2019开发环境


以下是本篇文章正文内容,下面案例可供参考

一、线性表的应用

实验内容描述

项目名称:学生信息管理系统
项目内容:设计一个学生信息管理系统,实现对学生基本信息的添加、删除、修改和查询等操作,其中每个学生信息包含学号,姓名和绩点。要求系统完成以下主要功能:
(1)显示:显示当前所有学生信息记录;
(2)录入:从键盘输入一条学生信息记录,插入到表中指定的位置;
(3)查找:根据学号或者记录的位置查找学生的各项信息;
(4)删除:删除指定位置的学生信息记录;
(5)更新:更新指定位置的学生信息记录;
(6)统计:统计表中学生人数;
(7)排序:按照学号或者绩点进行排序;
(8)清空:清空表中所有记录。

数据结构的设计

typedef struct {
    
    //每个学生数据的组成
	char number[8];
	char name[20];
	double score;
}Student;
typedef struct LNode {
    
    //线性单链表的存储结构
	Student data;
	struct LNode* next;
}LNode, *LinkList;

二、栈的应用

实验内容描述

项目名称:简易计算器程序
项目内容:编写程序,模拟简单运算器的工作:输入一个算式(没有空格),遇等号“=”说明输入结束,输出结果。假设计算器只能计算加减乘除运算,运算数和结果都是整数。要求完成以下功能: 从键盘录入中缀表达式,计算中缀表达式的值。

数据结构的设计

typedef struct//操作数栈
{
    
    
	int* top;
	int* base;
	int listsize;
}List;
typedef struct//操作符栈
{
    
    
	char* top;
	char* base;
	int nodesize;
}Node;

三、树的应用

实验内容描述

用递归的方法实现以下算法:
1.以二叉链表表示二叉树,建立一棵二叉树;
2.输出二叉树的中序遍历结果;
3.输出二叉树的前序遍历结果;
4.输出二叉树的后序遍历结果;
5.计算二叉树的深度;
6.统计二叉树的结点个数;
7.统计二叉树的叶结点个数;
8.统计二叉树的度为1的结点个数;
9.输出二叉树中从每个叶子结点到根结点的路径。

数据结构的设计

//二叉树的二叉链表存储表示
typedef struct BiNode
{
    
    
	char data;						//结点数据域
	struct BiNode* lchild, * rchild;	//左右孩子指针
}BiTNode, * BiTree;

四、无向图的应用

实验内容描述

项目名称:通信网构建
项目内容:在 n 个城市之间建立通信联络网,则连通 n 个城市只需要 n-1 条线路。要求在最节省经费的前提下建立这个通信网。
(1) 完成城市信息的输入。
在这里插入图片描述
(2) 完成城市信息的编辑,包括城市以及城市间距离的增加,删除,信息修改等。
(3) 允许用户指定下列两种策略进行通信网的构建
1) 采用 Prim 算法进行通信网的构建;
2) 采用 Kruskal 算法进行通信网的构建;

数据结构的设计

typedef char VerTexType;              		//假设顶点的数据类型为字符型 
typedef int ArcType;
#define MVNum 100                       	//最大顶点数
#define MaxInt 32767                    	//表示极大值,即∞

//----------------图的邻接矩阵---------------------
typedef struct {
    
    
	VerTexType vexs[MVNum];               //顶点表 
	string name[MVNum];
	ArcType arcs[MVNum][MVNum];      		//邻接矩阵 
	int vexnum, arcnum;                		//图的当前点数和边数 
}AMGraph;
int Vexset[MVNum];							//辅助数组Vexset的定义

//辅助数组Edges的定义
struct {
    
    
	VerTexType Head;						//边的始点
	VerTexType Tail;						//边的终点
	ArcType lowcost;						//边上的权值
}Edge[(MVNum * (MVNum - 1)) / 2];
//辅助数组的定义,用来记录从顶点集U到V-U的权值最小的边
struct {
    
    
	VerTexType adjvex;						//最小边在U中的那个顶点
	ArcType lowcost;						//最小边上的权值
}closedge[MVNum];

五、有向图的应用

实验内容描述

项目名称:教学计划编制系统
项目内容:大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年包含两个学期,每个学期的时间长度和学分上限均相等。每个专业开设的课程都是确定的, 而且课程在开设时间的安排上必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制系统,该系统需要满足以下功能:
(1) 完成课程进修目录信息的读取;
在这里插入图片描述
(2) 完成课程进修目录信息的编辑,包括课程的增加,删除,信息修改等;
(3) 学生的教学计划学期为 6,每个学期的学分上限为 10 分,允许用户指定下列编排策略进行教学计划的输出。
1) 使学生在各个学期中的负担尽量均匀;
2) 使课程尽可能地集中在前几个学期中。
若根据给定的条件问题无解,则报告适当信息;否则将教学计划输出到用户指定的文件中,计划的表格格式自行设计。

数据结构的设计

typedef struct arcnode
{
    
    
	 int adjvex;
	 arcnode* next;
}arcnode;

typedef struct 
 {
    
    
	 char name[20];
	 string classsid;
	 int credit;
	 int indegree;
	 int state;
	 arcnode* first;
 }vnode,adjlist[100];
 
 typedef int Elemtype;
 
 typedef struct 
 {
    
    
	 adjlist vertices;
	 int  vexnum, arcnum;
 }algraph;
 
 typedef struct
 {
    
    
	 Elemtype* base;
	 Elemtype* top;
	 int stacksize;
 }sqstack;

六、查找与排序

实验内容描述

在实验1设计的学生管理系统基础上,增加以下功能:
(1) 利用直接插入排序或者折半插入排序按照姓名进行排序;
(2) 利用快速排序按照学号进行排序;
(3) 根据姓名进行折半查找,要求使用递归算法实现,成功返回此学生的学号和成绩;
(4) 根据学号进行折半查找,要求使用非递归算法实现,成功返回此学生的姓名和成绩。

数据结构的设计

typedef struct
{
    
    
	string name;
	string number;
	int score;
}ElemType;
//顺序表的存储结构                         
typedef struct
{
    
    
	ElemType* r;	         						//存储空间的基地址
	int  length;            						//顺序表长度
}SqList;											//顺序表类型



七、哈夫曼编码

实验内容描述

实现一个哈夫曼编码系统,系统包括以下功能:
(1) 字符信息统计:读取待编码的源文件SourceFile.txt,统计出现的字符及其频率。
(2) 建立哈夫曼树:根据统计结果建立哈夫曼树。
(3) 建立哈夫曼码表:利用得到的哈夫曼树,将各字符对应的编码表保存在文件Code.txt中。

数据结构的设计

typedef struct
{
    
    
	int weight;
	int parent, lchild, rchild;
}HTNode, * HuffmanTree;
typedef char** HuffmanCode;


总结

因为实验内容较多,这里就不展示全部源码,详情可以参考以下的实验报告。
链接:冲冲冲~
提取码:mjlh
复制这段内容后打开百度网盘手机App,操作更方便哦

猜你喜欢

转载自blog.csdn.net/mo_zhe/article/details/112733427
今日推荐