数据结构实验报告Word格式.docx
- 文档编号:15394986
- 上传时间:2022-10-30
- 格式:DOCX
- 页数:45
- 大小:547.21KB
数据结构实验报告Word格式.docx
《数据结构实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告Word格式.docx(45页珍藏版)》请在冰豆网上搜索。
8
●设计要求:
(1)定义客房链表结点结构类型,以Hotel和*HLink命名,数据域:
客房名称roomN、标准价格Price、入住价格PriceL(默认值=标准价格*80%)、床位数Beds、入住状态State(空闲、入住、预订,默认值为空闲),指针域:
*next;
(2)实现创建客房基本情况链表函数voidBuild(HLink&
H),输入客房名称、标准价格、床位数,将入住价格、入住状态修改为默认值,建议用文件操作来输入数据;
(3)实现函数voidupdateH(HLink&
H,intbeds,char*state),将床位数为beds的客房入住状态改为state;
(4)实现输出客房基本情况函数voidExp(HLinkH),输出所有客房的客房名称、标准价格、入住价格、床位数、入住状态;
(5)函数voidAdd(HLink&
H),将该链表中未入住的客房入住价格均加价20%;
(6)函数voidupBed(HLink&
H,intbeds),将该链表床位数不超过beds的结点都放在床位数超过beds的结点后面;
(7)求出入住价格最高的客房函数HLinkFirstH(HLink&
H),该函数内return语句返回入住价格最高的客房结点指针,返回前将该结点在链表中删除;
(8)函数voidMoveK1(HLink&
H,intk),将单链表中倒数第k个结点移到第一个结点位置,注意:
严禁采用先计算链表长度n再减k(即n-k)的方法;
(9)函数voidReverseN2(HLink&
H),将单链表的正中间位置结点之后的全部结点倒置的功能,注意:
严禁采用先计算链表长度n再除以2(即n/2)的方法;
(10)主控函数main()调用以上函数,输出(3)、(5)、(6)、(7)、(8)、(9)处理后的链表内容、输出入住价格最高的客房基本情况。
可能用到的函数:
从文件中读取客房数据:
fscanf(文件指针,"
%s%f,%d"
p->
roomN,&
p->
Price,&
Beds);
输出客房数据:
printf("
%s%8.1f%8.1f%6d%8s\n"
roomN,p->
Price,p->
PriceL,p->
Beds,p->
State);
字符串赋值函数:
char*strcpy(char*,constchar*);
字符串比较函数:
intstrcmp(constchar*,constchar*)
#include<
stdio.h>
stdlib.h>
string.h>
typedefstructHNode//定义客房链表结点结构
{
charroomN[7];
//客房名称
floatPrice;
//标准价格
floatPriceL;
//入住价格(默认值=标准价格*80%)
intBeds;
//床位数Beds
charState[5];
//入住状态(值域:
"
空闲"
、"
入住"
预订"
,默认值为"
structHNode*next;
//指针域
}Hotel,*HLink;
2.2实验二串模式匹配算法(串)
从主串中第K个字符起,求出子串在主串中首次出现的位置,即模式匹配或串匹配。
●要求用三种模式匹配算法分别实现:
⏹朴素的模式匹配算法(BF算法)
⏹KMP改进算法(Next[])
⏹KMP改进算法(NextVal[])
6
首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。
程序运行后,给出5个菜单项的内容和输入提示:
1.输入主串、子串和匹配起始位置
2.朴素的模式匹配算法
3.KMP改进算法(Next[])
4.KMP改进算法(NextVal[])
0.退出管理系统
请选择0—4:
●菜单设计要求:
使用数字0—4来选择菜单项,其它输入则不起作用。
●输出结果要求:
输出各趟匹配详细过程(其中3、4,首先输出Next[]或者NextVal[]的各元素的数值),最后输出单个字符比较次数、匹配成功时的位置序号或者匹配失败提示信息。
2.3实验三求二叉树上结点的路径(二叉树)
在采用链式存储结构存储的二叉树上,以bt指向根结点,p指向任一给定的结点,编程实现求出从根结点bt到给定结点p之间的路径。
●设计思路:
数据结构:
typedefstructnode{
chardata;
//数据域
structnode*lchild,*rchild;
//左右孩子指针
}BinTNode;
//树中结点类型
typedefBinTNode*BinTree;
主要实现函数:
⏹二叉树的建立
⏹求指定结点路径
⏹二叉树的前、中、后序遍历算法
⏹查找函数
主控函数及运行环境设置
3.实验步骤
按以上实验内容的要求,给出实验步骤,包括程序流程图、源程序和运行结果截图等。
3.1实验一客房管理(链表)
3.1.1程序流程图
开始
HLinkL,h;
intid,k,Beds;
intbeds_num;
charbeds_state[5];
输入id值
Y
id==0?
N
id==1?
break;
创建输出链表
Build(L);
Exp(L);
输入床号,状态,更改客房入住状态
updateH(L,beds_num,beds_state);
id==2?
更改未入住客房价格(加价20%)
Add(L);
id==3?
输入床号Beds,更改床号排列顺序
upBed(L,Beds);
id==4?
输出最高价格客房信息h并删除
h=FirstH(L);
id==5?
将倒数第k个客房排至首位
MoveK1(L,k);
Exp(L);
id==6?
将正中间节点后的节点全部倒置ReverseN2(L);
id==7?
输入有误!
请返回重新输入
default
结束
3.1.1源程序
windows.h>
//定义客房链表结点结构
typedefstructHNode
)
//函数声明
voidBuild(HLink&
H);
voidupdateH(HLink&
H,intbeds,charstate[]);
voidExp(HLinkH);
voidAdd(HLink&
voidupBed(HLink&
H,intbeds);
HLinkFirstH(HLink&
voidMoveK1(HLink&
H,intk);
voidReverseN2(HLink&
//主函数
voidmain()
{
HLinkL,h;
intid,k,Beds;
intbeds_num;
charbeds_state[5];
while
(1){
printf("
\n****************欢迎进入客房信息管理系统******************"
);
\n\n请查看相关功能,并【!
!
按顺序!
】输入相关功能编号,谢谢!
\n"
*******************************************************************\n"
|1--查看所有客房信息|\n"
|2--更改客房入住状态|\n"
|3--所有未入住客房加价20%%|\n"
|4--更改床号排列顺序|\n"
|5--查找入住价格最高的客房并清空该信息,然后输出更新后信息|\n"
|6--将倒数第K个客房排在首行|\n"
|7--正中间位置结点之后的全部结点倒置后的客房信息|\n"
||\n"
|!
其他---退出|\n"
*******************************************************************\n\n"
!
请选择:
scanf("
%d"
&
id);
if((id<
1)||(id>
7))
break;
switch(id){
case1:
Build(L);
Exp(L);
break;
case2:
printf("
\n更改客房入住状态:
\n\n"
输入要更改的床位数:
scanf("
beds_num);
\n输入要更改的客房状态(空闲、入住、预订):
%s"
beds_state);
updateH(L,beds_num,beds_state);
输出更新后的客房信息\n"
case3:
\n!
将该链表中未入住的客房入住价格均加价20%%\n"
Add(L);
输出加价后的客房信息\n"
case4:
输入Beds数:
upBed(L,Beds);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告