利用队列模拟病人看病

作者在 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;
}

 

数据结构 | 阅读 1434 次
文章评论,共0条
游客请输入验证码