数据结构实验大Word文件下载.docx
《数据结构实验大Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验大Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
实验项目的目的和要求:
1.温习C语言指针的用法
2.温习C语言结构体的用法
3.温习C语言文件的用法
4.理解时刻复杂度分析的大体方式
上机实验内容:
(1)用指针方式编写程序:
从键盘输入N(比如10)个整形数据,并存入数组,要求将N个数中最大的数与第一个数互换;
将其中最小的数最后一个数互换。
(2)有M个学生,每一个学生的数据包括学号、姓名、三门课的成绩、平均分。
要求从键盘依次输入M个学生的学号、姓名、三门课的成绩,自动计算三门课的平均分数,并输出M个学生的数据。
(3)将以上
(1)、
(2)中的数据存入数据文件进行相同的操作。
说明:
不占课内学时
实验项目二
线性表的大体操作及应用
实验项目的和要求:
1.掌握线性表的特点
2.掌握线性表的顺序存储结构和链式存储结构的大体运算。
3.尽可能考虑算法的健壮性
4.实验报告中要写出测试数据、错误分析和收获。
上机实验内容一:
两种存储结构的大体运算
1.问题描述
利用二级菜单实现顺序表和链表的成立、插入和删除算法
2.设计分析
通过菜单项,挪用子函数实现算法。
二级菜单如下所示:
*****************************
*1-------顺序表*
*2-------链表*
*0-------退出*
请输入的选择:
(0-2):
线性表的链式存储
##############################
#1----前插成立链表#
#2----后插成立链表#
#3----访问第i个元素#
#4----插入#
#5----删除#
#6----求线性表的表长#
#0----退出#
请输入选择(0-6):
3.结点结构类型描述
typedefstruct{
datatypedata[MAXSIZE];
intlength;
}sqlist;
typedefstructnode{
datatypedata;
structnode*next;
}ListNode,*LinkList
上机实验内容二:
超市密码存储箱系统的简单应用
1.问题描述
顾客到超市中需要存包时,第一检查是不是有空箱子,若是有就“投一元硬币”--------“找到一个空箱子,同时产生密码”--------“打印密码,打开箱子”--------“取密码纸存包,并关闭箱子,入超市购物”--------“购物结束”--------“输入密码”--------“找到对应箱子并打开”--------“取包”。
2.设计分析
①界面:
编写菜单,能够循环进行存包、取包、退出。
②顾客选择存包时,第一在空箱子链表中查找是不是还有结点,若是“有”时就产生密码,将密码存入结点,从空箱子链表中删除该结点,加入到实箱子链表中,不然就显示箱子已满。
③顾客选择取包时,第一输入密码与实箱子链表中结点的密码进行比对,若是成功就从实箱子链表中删除该结点,加入到空箱子链表,不然显示密码不匹配。
3.密码箱的存储结构类型概念
typedefstructnode
{intnum;
/*箱子的号码*/
intpassword;
/*箱子的密码(满箱有,空箱无)*/
structnode*next;
/*指向下个结点的指针*/
}Node,*LinkList;
上机实验内容三:
员工通信录管理
1.问题描述
为某个单位成立一个员工通信录管理系统,能够方便地查询每一个员工的办公室电话号码、电话号码及电子邮箱。
2.设计分析
在本设计中,整个通信录能够采用顺序表或链表方式存储。
其功能包括通信录链表的成立、员工通信信息的查询、修改、插入与删除和整个通信录表的输出。
3.员工通信信息的结构类型概念和通信录链表的结点类型
typedefstruct
{charnum[5];
/*员工编号*/
charname[8];
/*员工姓名*/
charphone[9];
/*办公室电话号码*/
charcall[12];
/*电话号码*/
}DataType;
/*员工通信信息的结构类型*/
typedefstructnode
{DataTypedata;
/*结点的数据域*/
/*结点的指针域*/
}ListNode,*LinkList;
/*通信录链表的结构类型*/
上机实验内容四:
运动会记分子系统或学生成绩管理子系统
参加运动会的N个学校编号为1~N。
比赛分成M个男子项目和W个女子项目,每一个项目取前3名,得分别离为5,3,2。
写一个程序产生各类成绩单和得分报表。
完成功能包括如下:
①产生一总成绩表,包括:
系名、男子集体总分、女子集体总分、集体总分
存储结构要求用线性表的顺序存储。
②实验报告中要写出测试数据、错误分析和收获。
③若选择学生成绩管理子系统,可仿照运动会记分子系统完成相关的插入、删除、查找及各类统计工作。
3.运动会记分子系统结点的结构类型描述
typedefstructlnode
{
intman[m];
握栈和队列的概念和特点
2.掌握栈和队列在顺序和链式存储结构下的插入、删除算法
3.认真分析项目实例中的内容,将相关程序在运算机上运行实现
表达式求值问题
求一个数学表达式的值:
用户输入一个包括正整数、括号和四则运算符(“+”、“—”、“*”、“/”)的算术表达式,计算其结果。
第一置操作数栈为空栈,表达式起始符“#”为运算符栈底元素;
依次读入表达式中每一个字符,若是操数则进操作数栈,若是操作符则和操作符栈顶的运算符进行比较优先权后作相应的操作,直到整个表达式求值完毕(即操作符栈顶元素和当前读入的字符均为“#”)
3.结点结构类型描述如下
typedefstruct
{char*base,*top;
intstacksize;
}sqstack;
迷宫求解问题
在一个m行n列的迷宫中,设入口为(1,1),出口为(m,n),即从入口动身,顺某一方向向前探索,直到出口,若是迷宫中没有通路,就输出迷宫无解。
本实验主要涉及的算法包括:
随机生成一个m行n列的矩阵,为了操作方便能够在矩阵外围生成一圏障碍;
设置东南西北四个方向,计算相邻节点的位置;
对走过的节点进行标注;
在迷宫中进行探索,找出通路。
{introw;
intcol;
};
实验项目四
实验名称:
二叉树两种存储结构的应用
实验目的和要求:
1.掌握二叉树的遍历思想及二叉树的存储实现。
2.掌握二叉树的大体操作:
成立二叉树、二叉树的遍历
3.选择一种形式完成二叉树的显示
4.掌握二叉树的常见算法的程序实现
5.实验报告中要写出测试数据、错误分析和收获
二叉树的成立及相关算法的实现
利用菜单实现二叉树的相关算法
选择相应的菜单挪用相关算方式函数,完成二叉树的成立、显示、三种遍历、求树高、求叶子节点数等。
菜单显示如下:
*****************************
*1-------二叉树的成立*
*2-------显示二叉树*
……………
*n-------退出*
(0-n):
3.结点结构类型设计
Typedefstructnode{
Datatypedata;
Structnode*lchild,*rchild;
}BiTnoe,*BiTree;
哈夫曼编码/译码系统
要求编写一程序模拟传输进程,实此刻发送前将要发送的字符信息进行编码,然后进行发送,接收后将传来的数据进行译码,即将信息还原成发送前的字符信息。
在本例中的算法主要有:
哈夫曼树的成立;
哈夫曼编码的生成;
对编码信息的翻译。
要求设置发送者和接收者两个功能。
发送者的功能包括:
①输入待传送的字符信息;
②统计字符信息中出现的字符类数和各字符出现的次数(频率);
③按照字符的种类数和各字符出现的次数成立哈夫曼树;
④利用以上哈夫曼树求出各字符的哈夫曼编码;
⑤将字符信息转换成对应的编码信息进行传送。
接收者的功能包括:
①接收发送者传送来的编码信息;
②利用上述哈夫曼树对编码进行翻译,即将编码信息还原成发送前的字符信息。
3.结点的类型概念
①哈夫曼树的存储结构类型概念为:
typedefstruct{
chardata;
/*编码对应的字符*/
intweight;
/*结点的权值*/
intlchild,rchild,parent;
/*左右孩子及双亲的下标*/
}HTNode;
②哈夫曼编码的存储结构类型概念为:
charbits[N];
/*寄存哈夫曼编码的字符数组*/
intstart;
/*记录编码的起始位置,因为每种字符的编码长度不同*/
}HCode;
只占用2个课内学时,学生可利用开放实验室利用课余时刻完本钱次实验内容。
实验项目五
图的存储及应用
1.掌握图的存储思想及其存储实现
2.掌握图的深度、广度优先遍历算法思想及其程序实现
3.掌握图的常见应用算法的思想及其程序实现
实验内容一:
图的遍历问题
利用菜单实现图的相关算法,如键盘输入以下结点数据:
太原、成都、北京、上海、天津、大连、河北,成立一个有向图或无向图(自定)的邻接表并输出该邻接表;
在图的邻接表的基础上计算各极点的度,并输出;
以有向图的邻接表为基础实现输出它的拓扑排序序列;
采用邻接表存储实现无向图的深度优先遍历;
采用邻接表存储实现无向图的广度优先遍历;
采用邻接矩阵存储实现无向图的最小生成树的PRIM算法
挪用菜单项,别离挪用相应的子函数。
注意极点存储地名,利用字符数组来实现。
3.结构类型概念
typedefcharvextype[10];
/*极点数据类型*/
typedefintedgetype;
/*边数据类型*/
vextypevex[MAXSIZE];
edgetypearc[MAXSIZE][MAXSIZE];
intvexnum,arcnum;
}Mgraph;
intadjvex;
structnode*next}EdgeNode;
vextypevex;
EdgeNode*firstedge;
}VexNode;
VexNodeadjvex[MAXSIZE];
intn,e;
}ALGraph;
实验内容二:
所有极点对的最短路径
1.问题描述:
设置4个村落之间的交通,村落之间的距离用各边上的权值来表示。
此刻要求从这4个村落当选择一个村落建一所医院,问这所医院应建在哪个村落,才能使离医院最远的村落到医院最近。
用有向加权图表示的交通图中,有向边<
vi,vj>
表示第i个村落和第j个村落之间有道路,边上的权表示这条道路的长度。
该问题的实质是求解任意两极点间的最短路径问题。
即求出每一个极点到其他极点的最短路径的最大值,最大值最小的极点作为医院所在村落。
3.结构类型概念
typedefcharvextype;
vextypevex[maxsize];
edgetypearc[maxsize][maxsize];
实验项目六
数据结构课程设计
掌握小型系统开发方式,提高学生综合开发能力。
按如实际问题,设计方案,综合运用课程知识,完成相关系统的设计、编程与调试工作。
数据结构算法演示系统
分析、调研数据结构课程所学的算法(功能模块)的相关功能模块,采用结构化设计思想、模块分解的规则组成一个易利用的数据结构算法演示系统。
电话短信中电话号码和电话号码的识别与提取
在利用电话收发短信时,收到的短信内容中常会包括对方发来的电话号码或电话号码,为了方便用户能直接提取其中的号码并存入到其电话的通信录中,现要求开发电话系统软件中的一个子功能,实现从电话短信内容中识别和提取电话号码(7位或8位)和电话号码(11位),并将其存入通信录中。
要从电话短信的内容中识别电话号码或电话号码,必需从短信的第一个字符开始查找,找到第一个数值型字符(‘0’~‘9’),然后依次判断其后的字符,若其后有持续的6个或7个数值型字符,则将其识别成电话号码并提取,若其后有持续的10个数值型字符,则将其识别成电话号码并提取。
继续向后搜索直到整个短信查找完毕。
3.存储结构类型概念
①短信的存储结构类型概念
typedefstruct{
charword[200];
/*短信内容*/
/*短信长度*/
}Message;
②通信录中记录的存储结构类型的概念
typedefstruct
/*姓名*/
charphone[11];
/*电话号码或电话号码*/
}Note;
药店的药品销售统计系统
1.问题描述:
设计一系统,实现医药公司按期对各药品的销售记录进行统计,并按药品编号、单价、销售量或销售额做出排序。
在设计中,第一从数据文件读出各药品的信息记录,存储在顺序表中。
各药品的信息包括:
药品编号、药品名称、单价、销售量、销售额。
其中药品编号共4位,采用字母和数字混合编号,如:
B125,前一名为大写字母,后三位为数字。
①药品信息的存储结构类型概念
typedefstructnode{
charnum[4];
/*药品编号*/
charname[10];
/*药品名称*/
floatprice;
/*单价*/
intcount;
/*销售量*/
floatsale;
/*销售额*/
}DataType;
②存储药品信息的顺序表的概念
DataTyper[maxsize];
}sequenList;
电视大赛观众投票及排名系统
在很多电视大赛中,通常被选手演出结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手取得的票数进行统计,从高到低进行降序排列,从而自动产生冠军、亚军和季军。
现要求编写一程序模拟实现上述系统的功能。
在本系统中,第一输入参赛选手的人数(范围为1-9个),然后按照人数通过malloc函数来开辟寄存选手信息的顺序表。
将选手的编号和姓名依次存入顺序表单元中,观众通过按键进行投票,按“1”表示为1号选手投票,按“2”表示为2号选手投票,依次类推。
以按“0”作为投票结束标志。
投票结束后进行排序。
3.存储结构类型概念
①选手信息的存储结构类型概念
/*选手姓名*/
intnum;
/*选手编号*/
intscore;
/*选手得分*/
inttax;
/*选手名次*/
}Node;
②开辟空间用于构造寄存选手信息的顺序表R:
R=(Node*)malloc(n*sizeof(Node));
其中n为参赛选手的人数,在此采用动态空间分派,而不是在开始时直接开辟静态数组,如此是为了避免空间的不足造成浪费。
在投票时,按“1”为1号选手投票的实现:
Scanf(“%c”,&
k);
/*观众按键*/
R[K-48].score=R[K-48].score+1;
若观众输入的是“1”,则“1”-48即为ASCII-48=1,因此能够实现对1号选手的票数加1,即R[1]=R[1]+1。
其他选手类似。
第十周围布置课程设计的相关要求,学生分小组、小组内每一个学生有具体分工,利用开放实验室课余时刻完成。
三、实验报告
从实验二开始每一个实验要交实验报告,格式必需规范(见实验二提供的实验报告要求),实验报告中要写出测试数据、错误分析和收获。
四、实验课程考核
以平时实验报告成绩点40%,最后设计实验占60%。
在期末进行该课程的实验考核,按照考核结果、实验报告和实验考勤等方面,综合给出该课程的实验成绩,计入该课程的总成绩中。
五、利用教材及主要教学参考书
参考书目:
1.严蔚敏等,《数据结构题集》
2.谭浩强等,《实用数据结构》
执笔教师:
王春红教研室主任:
贺玉珍教学系主任:
王春红