第七周 排队看病模拟

来源:互联网 发布:董浩 超级美工 花瓣网 编辑:程序博客网 时间:2024/06/07 04:43
  1.  Copyright (c) 2017, 烟台大学计算机学院 
  2.  *All rights reserved.  
  3.  *作    者:李浩南 
  4.  *完成日期:2017年10月19日 

  1.  *版 本 号:v1.0
  2.  *问题描述:编写一个程序,反映病人到医院看病,排队看医生的情况
  3.   *结果显示:如图所示
  4. [cpp] view plain copy
    1. #include <stdio.h>  
    2. #include <malloc.h>  
    3. typedef struct qnode  
    4. {  
    5.     int data;  
    6.     struct qnode *next;  
    7. } QNode;            /*链队结点类型*/  
    8.   
    9. typedef struct  
    10. {  
    11.     QNode *front,*rear;  
    12. } QuType;           /*链队类型*/  
    13.   
    14. void SeeDoctor()  
    15. {  
    16.     int sel,flag=1,find,no;  
    17.     QuType *qu;  
    18.     QNode *p;  
    19.     qu=(QuType *)malloc(sizeof(QuType));    /*创建空队*/  
    20.     qu->front=qu->rear=NULL;  
    21.     while (flag==1)                             /*循环执行*/  
    22.     {  
    23.         printf("1:排队 2:就诊 3:查看排队 4.不再排队,余下依次就诊 5:下班  请选择:");  
    24.         scanf("%d",&sel);  
    25.         switch(sel)  
    26.         {  
    27.         case 1:  
    28.             printf("  >>输入病历号:");  
    29.             do  
    30.             {  
    31.                 scanf("%d",&no);  
    32.                 find=0;  
    33.                 p=qu->front;  
    34.                 while (p!=NULL && !find)  
    35.                 {  
    36.                     if (p->data==no)  
    37.                         find=1;  
    38.                     else  
    39.                         p=p->next;  
    40.                 }  
    41.                 if (find)  
    42.                     printf("  >>输入的病历号重复,重新输入:");  
    43.             }  
    44.             while (find==1);  
    45.             p=(QNode *)malloc(sizeof(QNode));   /*创建结点*/  
    46.             p->data=no;  
    47.             p->next=NULL;  
    48.             if (qu->rear==NULL)                 /*第一个病人排队*/  
    49.             {  
    50.                 qu->front=qu->rear=p;  
    51.             }  
    52.             else  
    53.             {  
    54.                 qu->rear->next=p;  
    55.                 qu->rear=p; /*将*p结点入队*/  
    56.             }  
    57.             break;  
    58.         case 2:  
    59.             if (qu->front==NULL)                /*队空*/  
    60.                 printf("  >>没有排队的病人!\n");  
    61.             else                                /*队不空*/  
    62.             {  
    63.                 p=qu->front;  
    64.                 printf("  >>病人%d就诊\n",p->data);  
    65.                 if (qu->rear==p)            /*只有一个病人排队的情况*/  
    66.                 {  
    67.                     qu->front=qu->rear=NULL;  
    68.                 }  
    69.                 else  
    70.                     qu->front=p->next;  
    71.                 free(p);  
    72.             }  
    73.             break;  
    74.         case 3:  
    75.             if (qu->front==NULL)            /*队空*/  
    76.                 printf("  >>没有排列的病人!\n");  
    77.             else                            /*队不空*/  
    78.             {  
    79.                 p=qu->front;  
    80.                 printf("  >>排队病人:");  
    81.                 while (p!=NULL)  
    82.                 {  
    83.                     printf("%d ",p->data);  
    84.                     p=p->next;  
    85.                 }  
    86.                 printf("\n");  
    87.             }  
    88.             break;  
    89.         case 4:  
    90.             if (qu->front==NULL)            /*队空*/  
    91.                 printf("  >>没有排列的病人!\n");  
    92.             else                            /*队不空*/  
    93.             {  
    94.                 p=qu->front;  
    95.                 printf("  >>病人按以下顺序就诊:");  
    96.                 while (p!=NULL)  
    97.                 {  
    98.                     printf("%d ",p->data);  
    99.                     p=p->next;  
    100.                 }  
    101.                 printf("\n");  
    102.             }  
    103.             flag=0;                         /*退出*/  
    104.             break;  
    105.         case 5:  
    106.             if (qu->front!=NULL)            /*队不空*/  
    107.                 printf("  >>请排队的病人明天就医!\n");  
    108.             flag=0;                     /*退出*/  
    109.             break;  
    110.         }  
    111.     }  
    112.     p=qu->front;  //销毁队列  
    113.     QNode *q;  
    114.     while (p!=NULL)  
    115.     {  
    116.         q = p->next;  
    117.         free(p);  
    118.         p = q;  
    119.     }  
    120. }  
    121.   
    122. int main()  
    123. {  
    124.     SeeDoctor();  
    125.     return 0;  
    126. }  


原创粉丝点击