数据结构:病人看病程序的模拟

上传人:汽*** 文档编号:430793633 上传时间:2022-08-18 格式:DOCX 页数:8 大小:48.12KB
返回 下载 相关 举报
数据结构:病人看病程序的模拟_第1页
第1页 / 共8页
数据结构:病人看病程序的模拟_第2页
第2页 / 共8页
数据结构:病人看病程序的模拟_第3页
第3页 / 共8页
数据结构:病人看病程序的模拟_第4页
第4页 / 共8页
数据结构:病人看病程序的模拟_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《数据结构:病人看病程序的模拟》由会员分享,可在线阅读,更多相关《数据结构:病人看病程序的模拟(8页珍藏版)》请在金锄头文库上搜索。

1、实验二:病人看病模拟程序一、实验目的1、掌握单链队列存储方式的类型定义,掌握单链队列的基本运算的实现。2、学会根据应用问题的需要选择合适的数据结构,掌握队列的先进先出运算规则及其在病 人看病模拟程序中的应用,理解队列在运算过程中状态的变化。二、实验内容编写一个程序,反映病人到医院看病排队看医生的情况。三、需求分析1、运行环境:Windows操作环境,Visual C+6.02、程序应该达到的功能:在病人排队过程中,主要重复两件事: ( 1 )病人到达就诊室,将病历交给护士,排到等待队列中候诊。(2)护士从等待队列中取出下一位病人的病历,该病人进入入诊室就诊。 要求模拟病人等待就诊这一过程。 程

2、序采用菜单方式, 其选项及功能说民如下:(1)排队输入排队病人的病历号,加入到病人排队队列中。(2)就诊病人排队队列中最前面的病人就诊,并将其从队列中删除。(3)查看排队从队首到队尾列出所有的排队病人的病历号。(4)不再排队,余下依次就诊从队首到队尾列出所有的排队病人的病历 号,并退出运行。(5)下班退出运行。四、概要设计1、 数据结构的选择 考虑到病人排队候诊的过程中具有先排队就诊的特诊,与队列的先进先出的特 征相吻合,因此可以考虑采用队列线性表,其中,队列的存储结构有循环顺序队列 和单链队列。考虑到循环顺序队列的插入,删除浪费空间和时间,故采用单链队列, 而建立带头结点的单链队列比无头结点

3、的单链队列更简化了插入和删除操作,因此 采用带头结点的单链队列。2、 程序的总体结构( 1 ) 建立名为“ proj3_6 ”的项目文件,在该项目的管理下完成本程序开发。在该 项目下建立名为“ exp3_6.cpp ”的源程序文件,文件中主要包括 main()和SeeDoctor() 两个函数,它们的关系如图1(b)所示。exp3_6.cpp 文件 rftE,proj3_6,;1 口 -iS prcj3_6 files -O Source FilesJj exp3-6.cpp iJ Header Files _ Resuur匚u Fes图 1 (a)图 1 (b)(2)程序的主要功能在SeeD

4、octot()函数中实现,main()函数起到调用SeeDoctor() 函数的作用。五、详细设计1、数据结构的类型定义:(1) 链队结点的类型定义typedef struct qnodeint data;struct qnode *next; QNode;(2) 链队的整体结构定义(3) 链队的整体结构图示A2、main()函数:void main() 3、seeDoctor();SeeDoctor()函数:模拟病人看病的过程。病人排队看医生,所以要用到一个队列,这里 设计了一个带头结点的单链表作为队列。队牡不再排吋系下依我就诊号下班请选择六、测试数据及测试结果 void SeeDoctor

5、()int sel,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)case 1:完成排队功能;case 2:完成就诊功能;case 3

6、:完成查看排队功能;case 4:完成不再排队,余下依次就诊功能;case 5:完成下班请选择功能; 各分支设计如下: 分支1:排队输入排队病人的病历号,加入到病人排队队列中。先检查将要排队病人的病历号是否已经在队列中,若在,则病历号重复,不能 完成排队功能,需重新输入;若不在,将其入队。为此,设计一个do-while语句来判断病历号是否存在队列中,其循环条件: find=1;首先输入病历号,若在,则find=1,继续循环;若不在,find=0,跳 出循环,将其入队。检查将要入队病人的病历号是否存在的关键代码如下: case 1: printf( 输入病历号”);doscanf(%d,&no)

7、; 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语句来判断队列是否为空,若空,则输出“

8、没有排队的病人!”;若不空, 则输出“病人d就诊”最后删除病人d。病人就诊关键代码如下:case 2: 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循环来依次输出从队首到队尾所有排队病人的病历号。查看排队关键代码如下:c

9、ase 3:if(qu-front-next=NULL)printf( 没有排队的病人);/队空else /队不空p=qu-front-next;printf( 排队病人);while(p!=NULL) printf(%d,p-data);p=p-next;printf(n);break; 分支4:不再排队,余下依次就诊一一从队首到队尾列出所有的排队病人 的病历号,并退出运行。先用if判断队列是否为空,若空,则输出“没有排队的病人”,find=O,退出循 环;若不空,则利用while循环来列出从队首到队尾的所有排队病人的病历号, find=0,退出循环。不再排队,余下依次就诊关键代码如下:ca

10、se 4: if(qu-front-next=NULL)/队空printf( 没有排队的病人); else /队不空p=qu-front-next;while(p!=NULL) printf(%d,p-data); p=p-next; printf(n); flag=0;break; 分支5:下班一一退出循环。若队不空,则输出“余下排队病人请明天就医!”,并将find=0,退出循环。 下班的关键代码如下:case 5: if(qu-front-next!=NULL)/队不空printf( 请排队的病人明天就医!);flag=0;/*退出 */break;测试结果:D; 縫序设计roj S_6D

11、eb ngp roj 3_&.ex:e杳一 IQi,!軒总汀pclAuk以社的血 冬裁病再划谅4病診歩$ 2222A2 队去人2排ans _ - -LxJ- s7.ylll3 t e 队:2队医rlu 看就看天M 查亠垄一明c 3:顺3:人to病y肚环再排队,4:环再排队,4环再排队,4:环再排队4:环再排队,贮环再排队余下依诙就诊恥下班请选择1余下依枚就诊S : $班请选择1余下依我就诊5 : F班请选择2余下依衣就诊5 : F班请选择丁余下依钦就诊5 : F班请选择4余下依次就诊5 : F班请选择七、使用说明在Visual C+6.0环境下,按下述步骤操作即可:“文件”菜单/打开 工作区/

12、选择proj3_6.dsw”,确定/ “编译”菜单/执行 exp3_6.exe。八、心得体会九、源程序清单/*文件名:exp3-6.cpp*/#includestdio.h#includemalloc.htypedef struct qnodeint data;struct qnode *next;QNode;/*链队结点类型*/typedef structQNode *front ,*rear;QuType;/*链队类型*/void seeDoc tor ()int sel,flag=l,find,no;QuType *qu;QNode *p;qu=(QuType*)malloc(sizeo

13、f(QuType);/创建队列qu-fron t=qu-rear=(QNode*)malloc(sizeof(QNode);/创建头结点 qu-front-next=NULL;/队列为空while(flag=1)/*循环执行*/ prin tf(l:排队2:就诊3:查看排队4:不再排队,余下依次就诊5:下班 请选择); scanf(%d,&sel);switch(sel) case 1: printf( 输入病历号);do scanf(%d,&no);find=0;p=qu-front;while(p!=NULL&!find) if(p-data=no)find=1;elsep=p-next;

14、if(find)printf( 输入的病历号重复,重新输入:);while(find=l);/直到输入一个不在队列中的病号才结束循环 p=(QNode*)malloc(sizeof(QNode);/创建结点p-data=no;p-next=NULL;qu-rear-next=p;qu-rear二p;/将*p 结点入队break;case 2: if (qu-front-next=NULL)/*队空*/prin tf(没有排队的病人!n);else/*队不空*/p=qu-front-next;printf(病人d 就诊n,p-data); qu-front-next=p-next;free(p);break;case 3:if(qu-front-next=NULL)/队空prin tf(没有排队的病人!n); else /队不空p=qu-f

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号