数据结构:病人看病程序的模拟Word文档下载推荐.doc
- 文档编号:13096421
- 上传时间:2022-10-04
- 格式:DOC
- 页数:8
- 大小:170KB
数据结构:病人看病程序的模拟Word文档下载推荐.doc
《数据结构:病人看病程序的模拟Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《数据结构:病人看病程序的模拟Word文档下载推荐.doc(8页珍藏版)》请在冰豆网上搜索。
(2)就诊病人排队队列中最前面的病人就诊,并将其从队列中删除。
(3)查看排队从队首到队尾列出所有的排队病人的病历号。
(4)不再排队,余下依次就诊从队首到队尾列出所有的排队病人的病历号,并退出运行。
(5)下班退出运行。
四、四、概要设计概要设计1、数据结构的选择考虑到病人排队候诊的过程中具有先排队就诊的特诊,与队列的先进先出的特征相吻合,因此可以考虑采用队列线性表,其中,队列的存储结构有循环顺序队列和单链队列。
考虑到循环顺序队列的插入,删除浪费空间和时间,故采用单链队列,而建立带头结点的单链队列比无头结点的单链队列更简化了插入和删除操作,因此采用带头结点的单链队列。
2、程序的总体结构
(1)建立名为“proj3_6”的项目文件,在该项目的管理下完成本程序开发。
在该项目下建立名为“exp3_6.cpp”的源程序文件,文件中主要包括main()和SeeDoctor()两个函数,它们的关系如图1(b)所示。
图1(a)图1(b)
(2)程序的主要功能在SeeDoctot()函数中实现,main()函数起到调用SeeDoctor()函数的作用。
五、五、详细设计详细设计1、数据结构的类型定义:
(1)链队结点的类型定义typedefstructqnodeintdata;
structqnode*next;
QNode;
(2)链队的整体结构定义(3)链队的整体结构图示qu-rearqu-front123qu-rearqu-frontmainSeeDoctorexp3_6.cpp文件2、main()函数:
voidmain()seeDoctor();
3、SeeDoctor()函数:
模拟病人看病的过程。
病人排队看医生,所以要用到一个队列,这里设计了一个带头结点的单链表作为队列。
六、六、测试数据及测试结果测试数据及测试结果voidSeeDoctor()intsel,flag=1,find,no;
/flag的初始值为1,一旦下班-退出系统,则将其置为0,从而结束QuType*qu;
QNode*p;
qu=(QuType*)malloc(sizeof(QuType);
qu-front=qu-rear=(QNode*)malloc(sizeof(QNode);
qu-front-next=NULL;
while(flag=1)printf(1:
排队2:
就诊3:
查看排队4:
不再排队,余下依次就诊5:
下班请选择);
scanf(%d,&
sel);
switch(sel)case1:
完成排队功能;
case2:
完成就诊功能;
case3:
完成查看排队功能;
case4:
完成不再排队,余下依次就诊功能;
case5:
完成下班请选择功能;
各分支设计如下:
分支1:
排队输入排队病人的病历号,加入到病人排队队列中。
先检查将要排队病人的病历号是否已经在队列中,若在,则病历号重复,不能完成排队功能,需重新输入;
若不在,将其入队。
为此,设计一个do-while语句来判断病历号是否存在队列中,其循环条件:
find=1;
首先输入病历号,若在,则find=1,继续循环;
若不在,find=0,跳出循环,将其入队。
检查将要入队病人的病历号是否存在的关键代码如下:
case1:
printf(输入病历号);
doscanf(%d,&
no);
find=0;
p=qu-front;
while(p!
=NULL&
!
find)if(p-data=no)find=1;
elsep=p-next;
if(find)printf(输入的病历号重复,重新输入:
);
while(find=1);
/直到输入一个不在队列中的病号才结束循环p=(QNode*)malloc(sizeof(QNode);
/创建结点p-data=no;
p-next=NULL;
qu-rear-next=p;
qu-rear=p;
/将*p结点入队break;
分支2:
就诊病人排队队列中最前面的病人就诊,并将其从队列中删除。
利用if语句来判断队列是否为空,若空,则输出“没有排队的病人!
”;
若不空,则输出“病人%d就诊”,最后删除病人%d。
病人就诊关键代码如下:
if(qu-front-next=NULL)/*队空*/printf(没有排队的病人!
n);
else/*队不空*/p=qu-front-next;
printf(病人%d就诊n,p-data);
qu-front-next=p-next;
free(p);
break;
分支3:
查看排队从队首到队尾列出所有的排队病人的病历号。
先利用if判断队列是否为空,若空,则输出“没有排队的病人!
若不空,则利用while循环来依次输出从队首到队尾所有排队病人的病历号。
查看排队关键代码如下:
if(qu-front-next=NULL)printf(没有排队的病人);
/队空else/队不空p=qu-front-next;
printf(排队病人);
=NULL)printf(%d,p-data);
p=p-next;
printf(n);
分支4:
不再排队,余下依次就诊从队首到队尾列出所有的排队病人的病历号,并退出运行。
先用if判断队列是否为空,若空,则输出“没有排队的病人!
”,find=0,退出循环;
若不空,则利用while循环来列出从队首到队尾的所有排队病人的病历号,find=0,退出循环。
不再排队,余下依次就诊关键代码如下:
if(qu-front-next=NULL)/队空printf(没有排队的病人);
else/队不空p=qu-front-next;
flag=0;
分支5:
下班退出循环。
若队不空,则输出“余下排队病人请明天就医!
”,并将find=0,退出循环。
下班的关键代码如下:
if(qu-front-next!
=NULL)/队不空printf(请排队的病人明天就医!
/*退出*/break;
测试结果:
七、七、使用说明使用说明在VisualC+6.0环境下,按下述步骤操作即可:
“文件”菜单/打开工作区/选择proj3_6.dsw”,确定/“编译”菜单/执行exp3_6.exe。
八、八、心得体会心得体会九、九、源程序清单源程序清单/*文件名:
exp3-6.cpp*/#include#includetypedefstructqnodeintdata;
/*链队结点类型*/typedefstructQNode*front,*rear;
QuType;
/*链队类型*/voidseeDoctor()intsel,flag=1,find,no;
QuType*qu;
/创建队列qu-front=qu-rear=(QNode*)malloc(sizeof(QNode);
/创建头结点qu-front-next=NULL;
/队列为空while(flag=1)/*循环执行*/printf(1:
if(qu-front-next=NULL)/队空printf(没有排队的病人!
printf(病人按以下顺序就诊:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 病人 看病 程序 模拟