文章目录
前言
本文要记录的大概内容:
笔者在大二上学期所学的数据结构课程的课内实验,分享自己的思路,提供给大家参考。
主要仪器设备及耗材
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,操作更方便哦