1、实验4 病人看病模拟程序【问题描述】 编写一个程序,反映病人到医院看病,排队看医生的情况。在病人排队的过程中,主要重复两件事:(1) 病人到达诊室,将病历本交给护士,排到等待队列中候诊。(2) 护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说明如下:(1) 排队输入排队病人的病历号,加入病人排队队列中。(2) 就诊病人排队队列中最前面的病人就诊,并将其从队列中删除;(3) 查看排队从对首到队尾列出所有的排队病人的病历号;(4) 不再排队,余下一次就诊从对首到队尾列出所有的排队病人的病历号,并退出运行;(5) 下班退出运行;
2、#include#includetypedef struct qnode int data; struct qnode *next;QNode; /链队结点类型typedef structQNode *front,*rear;QuType; /链队类型void seedoctor() /模拟病人看病的过程int sel,flag=1,find,no;QuType *qu;QNode *p;qu=(QuType *)malloc(sizeof(QuType); /创建空队qu-front=qu-rear=NULL;while(flag=1)printf(1:排队 2:就诊 3:查看排队 4:不再
3、排队,余下依次就诊 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; else p=p-next; if(find) printf(输入的病历号重复,重新输入:);while(find=1);p=(QNode *)malloc(sizeof(QNode); /创建结点p-data=no; p-next=NULL;if(qu-rear=NULL) /第一个病人排
4、队qu-front=qu-rear=p;elsequ-rear-next=p;qu-rear=p; /将*p结点入队 break;case 2: if(qu-front=NULL) /队空printf(没有排队的病人!n);else p=qu-front;printf(病人%d就诊n,p-data);if(qu-rear=p) /只有一个病人排队的情况qu-front=qu-rear=NULL;elsequ-front=p-next;free(p);break;case 3:if(qu-front=NULL) / 队空 printf(没有排队的病人!n);else /队不空 p=qu-fron
5、t; printf(排队病人:); while(p!=NULL) printf(%d,p-data); p=p-next; printf(n);break;case 4:if(qu-front=NULL) / 队空 printf(没有排队的病人!n);else /队不空 p=qu-front; printf(排队病人:); while(p!=NULL) printf(%d,p-data); p=p-next; printf(n);flag=0; /退出break;case 5: if(qu-front!=NULL) /队不空printf(请排队的病人明天就医!n);flag=0;break;void main() seedoctor();