作者在 2015-08-02 11:00:11 发布以下内容
最简单的有以下四个函数也就是四个步骤:
1.病人把病历本交到护士手中,相当于进队;
2.排在最前面的病人先看,同时取走病历,相当于出队;
3.查看排队,从队头到队尾依次显示队列中所有的病历号;
4.停止排队,退出程序。
#include <stdio.h>
#include <stdlib.h>
#include "malloc.h"
typedef struct queue
{
int data;
struct queue *next;
}QUEUE;
QUEUE *front=NULL;
QUEUE *rear=NULL;
void AddQueue(int x)
{
QUEUE *s;
s=(QUEUE *)malloc(sizeof(QUEUE));
s->data=x;
s->next=NULL;
if(rear==NULL)
front=s;
else
rear->next=s;
rear=s;
}
void DelQueue(int *e)
{
if(front==NULL)
printf("Queue is empty\n");
else
{
QUEUE *temp;
temp=front->next;
*e=front->data;
free(front);
front=temp;
}
return;
}
void DisplayQueue()
{
if(rear==NULL)
{
printf("Queue is empty\n");
return;
}
QUEUE *temp=front;
printf("目前所有的病例号\n");
while (temp!=NULL)
{
printf("%d",temp->data);
temp=temp->next;
}
printf("\n");
}
void SeeDoctor()
{
int selection,number;//number为病历号
int exinum;//exinum用于确认号码是否已有,true 表示与之前的号码重复,输入无效
int stop=0;//判断病历号是否全部进队,stop=1全部进队,反之,没有进队
int e;
int flag=1;
QUEUE *temp;
while(flag==1)
{
printf("1:排队 2:就诊 3:查看排队 4:停止排队\n");
printf("请选择:");
scanf("%d",&selection);
switch (selection)
{
case 1:
{
while(stop==0)
{
printf("输入病历号:");
do
{
scanf("%d",&number);
if(number==0)
break;
exinum=0;
temp=front;
while(temp!=NULL&&exinum==0)
{
if(temp->data==number)
exinum=1;
else
temp=temp->next;
if(exinum==1)
printf("输入病例号重复,重新输入\n");
}
}while(exinum==1);
if(number==0)
break;
else
AddQueue(number);
}
}
break;
case 2:
{
if(rear==NULL)
printf("目前无人排队\n");
else
{
temp=front;
DelQueue(&e);
printf("第%d号病人就诊\n",e);
}
}
break;
case 3:DisplayQueue();
break;
case 4:
{
if(front!=NULL)
printf("请排队的病人明天就医\n");
flag=0;
}
break;
}
}
}
int main()
{
SeeDoctor();
return 0;
}