数据结构实验4队列.doc
《数据结构实验4队列.doc》由会员分享,可在线阅读,更多相关《数据结构实验4队列.doc(6页珍藏版)》请在冰豆网上搜索。
实验4病人看病模拟程序
【问题描述】
编写一个程序,反映病人到医院看病,排队看医生的情况。
在病人排队的过程中,主要重复两件事:
(1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。
(2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。
要求模拟病人等待就诊这一过程。
程序采用菜单方式,其选项及功能说明如下:
(1)排队――输入排队病人的病历号,加入病人排队队列中。
(2)就诊――病人排队队列中最前面的病人就诊,并将其从队列中删除;
(3)查看排队――从对首到队尾列出所有的排队病人的病历号;
(4)不再排队,余下一次就诊――从对首到队尾列出所有的排队病人的病历号,并退出运行;
(5)下班――退出运行;
#include
#include
typedefstructqnode
{intdata;
structqnode*next;
}QNode;//链队结点类型
typedefstruct
{
QNode*front,*rear;
}QuType;//链队类型
voidseedoctor()//模拟病人看病的过程
{
intsel,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:
不再排队,余下依次就诊5:
下班请选择:
");
scanf("%d",&sel);
switch(sel)
{
case1:
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)//第一个病人排队
{
qu->front=qu->rear=p;
}
else
{qu->rear->next=p;
qu->rear=p;//将*p结点入队
}
break;
case2:
if(qu->front==NULL)//队空
printf(">>没有排队的病人!
\n");
else
{p=qu->front;
printf(">>病人%d就诊\n",p->data);
if(qu->rear==p)//只有一个病人排队的情况
{
qu->front=qu->rear=NULL;
}
else
qu->front=p->next;
free(p);
}
break;
case3:
if(qu->front==NULL)//队空
printf(">>没有排队的病人!
\n");
else//队不空
{p=qu->front;
printf(">>排队病人:
");
while(p!
=NULL)
{printf("%d",p->data);
p=p->next;
}
printf("\n");
}
break;
case4:
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;
case5:
if(qu->front!
=NULL)//队不空
printf(">>请排队的病人明天就医!
\n");
flag=0;
break;
}
}
}
voidmain()
{seedoctor();
}