您的位置: 网站首页 > 程序开发 > 数据结构 > 第3章 栈和队列 > 【3.6 队列的应用】

3.6 队列的应用

 

3.6  队列的应用

病人看病排队问题:设计一个程序,反映病人到医院看病、排队看医生的情况。

病人排队看医生采用先到先看的方式,所以要用到一个队列,这里设计了一个带头节点的单链表作为队列。完整的程序如下:

#include <stdio.h>

#include <malloc.h>

#include <string.h>

typedef struct QNode

{  

   char data[10];                                   /*数据域为字符类型*/

   struct QNode *next;

} QType;                                            /*链队节点类型*/

typedef struct

{

   QType *front,*rear;

} LinkQueue;                                        /*链队类型*/

void SeeDoctor()

{

    int sel,flag=1;

    LinkQueue *lq;

    QType *s;

    char name[10];

    lq=(LinkQueue *)malloc(sizeof(LinkQueue));                 

    lq->front=(QType *)malloc(sizeof(QType));

    lq->front->next=NULL;

    lq->rear=lq->front;

    while (flag==1)                                 /*未下班时循环执行*/

    {  

        printf("1:排队2:看医生3:查看排队0:下班  请选择:");

        scanf("%d",&sel);

        switch(sel)

        {

          case 0:

            if(lq->front!=lq->rear)                 /*队不空*/

                printf(">>请排队的患者明天就医\n");

            flag=0;

            break;

          case 1:

            printf(">>输入患者姓名:");scanf("%s",name);

            s=(QType *)malloc(sizeof(QType));

            strcpy(s->data,name);s->next=NULL;

            lq->rear->next=s;lq->rear=s;

            break;

           case 2:  

            if (lq->front==lq->rear)                    /*队空*/

                printf(">>没有排队的患者\n");

            else

            {

                s=lq->front->next;

                if (lq->rear==s)

                    lq->rear=lq->front;

                printf(">>患者%s看医生\n",s->data);

                lq->front->next=s->next;

                free(s);

            }

            break;

           case 3:

            if (lq->front==lq->rear)                    /*队空*/

                printf(">>没有排列的患者\n");

            else

            {

                s=lq->front->next;

                printf(">>排队患者:");

                while (s!=NULL)

                { 

                    printf("%s",s->data);

                    s=s->next;

                }

                printf("\n");

            }

            break;

        }

    }

}

void main()

{

    SeeDoctor();

}

本程序的一次执行结果如下:

1:排队2:看医生3:查看排队0:下班  请选择:1

  >>输入患者姓名:Smith

1:排队2:看医生3:查看排队0:下班  请选择:1

  >>输入患者姓名:John

1:排队2:看医生3:查看排队0:下班  请选择:3

  >>排队患者:Smith John

1:排队2:看医生3:查看排队0:下班  请选择:1

  >>输入患者姓名:Mary

1:排队2:看医生3:查看排队0:下班  请选择:2

  >>患者Smith看医生

1:排队2:看医生3:查看排队0:下班  请选择:2

  >>患者John看医生

1:排队2:看医生3:查看排队0:下班  请选择:0

  >>请排队的患者明天就医