设计一个程序,反映病人到医院看病、排队看医生的过程。
提示:
病人排队看医生采用先到先看的方式,所以要用到一个队列。
由于病人人数具有较大的不确定性,这里采用一个带头结点的单链表作为队列的存储结构。
为了简单,病人通过其姓名来唯一标识。
-------------------------以上是题目---------------------------------------
编译结果如图
代码:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 15
typedef char datatype;
typedef struct node{
datatype data[MAXSIZE];
struct node *next;
}LNode;
void print(LNode *head){//打印
LNode *p=head->next;
printf(" 剩下的病人:\n");
while(p!=NULL)
{
puts(p->data);
p=p->next;
}
}
main(){
LNode *head,*p,*q;
head=(LNode *)malloc(sizeof(LNode));
int n,i;
printf(" 输入一开始病人的人数:");
scanf("%d",&n);
printf(" 按顺序输入病人的名字:\n");
head->next=NULL;//初始化
p=head;
getchar();
for(i=1;i<=n;i++)
{
q=(LNode *)malloc(sizeof(LNode));
q->next=NULL;
gets(q->data);
p->next=q;
p=q;
}
print(head);
printf("\n 1.新到一个病人 2.医生看一次诊 3.查看剩下的病人\n");
do{
printf("\n 输入操作:");
scanf("%d",&n);
switch(n)
{
case 1: printf("\n 输入病人的姓名:");
q=(LNode *)malloc(sizeof(LNode));
q->next=NULL;
getchar();
gets(q->data);
p->next=q;
p=q;
break;
case 2: q=head->next;
if(q!=NULL)
{
printf(" 正在看诊的病人是:");
puts(q->data);
head->next=q->next;
free(q);
q=head->next;
if(q!=NULL)
{printf(" 下一个看诊的病人是:");
puts(q->data);
}
else
printf(" 没有病人了\n");
}
else
printf(" 没有病人了\n");
break;
case 3: if(head->next!=NULL)
print(head);
else
printf(" 没有病人了\n");
break;
default: exit(0);
}
}while(1);
}