第七周 项目5 -排队看病模拟

问题及代码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /*               
  2. Copyright (c)2016,烟台大学计算机与控制工程学院               
  3. All rights reserved.               
  4. 文件名称:排队.cpp               
  5. 作    者:  陈朋        
  6. 完成日期:2016年10月13日               
  7. 版 本 号:v1.0                  
  8. 问题描述:          
  9. 输入描述:数字              
  10. 程序输出:若干。            
  11. */          
  12.     #include <stdio.h>    
  13.     #include <malloc.h>    
  14.     typedef struct qnode    
  15.     {    
  16.         int data;    
  17.         struct qnode *next;    
  18.     } QNode;            /*链队结点类型*/    
  19.         
  20.         
  21.     typedef struct    
  22.     {    
  23.         QNode *front,*rear;    
  24.     } QuType;           /*链队类型*/    
  25.         
  26.         
  27.     void SeeDoctor()    
  28.     {    
  29.         int sel,flag=1,find,no;    
  30.         QuType *qu;    
  31.         QNode *p,*q;    
  32.         qu=(QuType *)malloc(sizeof(QuType));    /*创建空队*/    
  33.         qu->front=qu->rear=NULL;    
  34.         while (flag==1)                             /*循环执行*/    
  35.         {    
  36.             printf("1:排队 2:就诊 3:查看排队 4.不再排队,余下依次就诊 5:下班  请选择:");    
  37.             scanf("%d",&sel);    
  38.             switch(sel)    
  39.             {    
  40.             case 1:    
  41.                 printf("  >>输入病历号:");    
  42.                 do    
  43.                 {    
  44.                     scanf("%d",&no);    
  45.                     find=0;    
  46.                     p=qu->front;    
  47.                     while (p!=NULL && !find)    
  48.                     {    
  49.                         if (p->data==no)    
  50.                             find=1;    
  51.                         else    
  52.                             p=p->next;    
  53.                     }    
  54.                     if (find)    
  55.                         printf("  >>输入的病历号重复,重新输入:");    
  56.                 }    
  57.                 while (find==1);    
  58.                 p=(QNode *)malloc(sizeof(QNode));   /*创建结点*/    
  59.                 p->data=no;    
  60.                 p->next=NULL;    
  61.                 if (qu->rear==NULL)                 /*第一个病人排队*/    
  62.                 {    
  63.                     qu->front=qu->rear=p;    
  64.                 }    
  65.                 else    
  66.                 {    
  67.                     qu->rear->next=p;    
  68.                     qu->rear=p; /*将*p结点入队*/    
  69.                 }    
  70.                 break;    
  71.             case 2:    
  72.                 if (qu->front==NULL)                /*队空*/    
  73.                     printf("  >>没有排队的病人!\n");    
  74.                 else                                /*队不空*/    
  75.                 {    
  76.                     p=qu->front;    
  77.                     printf("  >>病人%d就诊\n",p->data);    
  78.                     if (qu->rear==p)            /*只有一个病人排队的情况*/    
  79.                     {    
  80.                         qu->front=qu->rear=NULL;    
  81.                     }    
  82.                     else    
  83.                         qu->front=p->next;    
  84.                     free(p);    
  85.                 }    
  86.                 break;    
  87.             case 3:    
  88.                 if (qu->front==NULL)            /*队空*/    
  89.                     printf("  >>没有排列的病人!\n");    
  90.                 else                            /*队不空*/    
  91.                 {    
  92.                     p=qu->front;    
  93.                     printf("  >>排队病人:");    
  94.                     while (p!=NULL)    
  95.                     {    
  96.                         printf("%d ",p->data);    
  97.                         p=p->next;    
  98.                     }    
  99.                     printf("\n");    
  100.                 }    
  101.                 break;    
  102.             case 4:    
  103.                 if (qu->front==NULL)            /*队空*/    
  104.                     printf("  >>没有排列的病人!\n");    
  105.                 else                            /*队不空*/    
  106.                 {    
  107.                     p=qu->front;    
  108.                     printf("  >>病人按以下顺序就诊:");    
  109.                     while (p!=NULL)    
  110.                     {    
  111.                         printf("%d ",p->data);    
  112.                         p=p->next;    
  113.                     }    
  114.                     printf("\n");    
  115.                 }    
  116.                 flag=0;                         /*退出*/    
  117.                 break;    
  118.             case 5:    
  119.                 if (qu->front!=NULL)            /*队不空*/    
  120.                     printf("  >>请排队的病人明天就医!\n");    
  121.                 flag=0;                     /*退出*/    
  122.                 break;    
  123.             }    
  124.         }    
  125.         p=qu->front;  //销毁队列    
  126.         while (p!=NULL)    
  127.         {    
  128.             q = p->next;    
  129.             free(p);    
  130.             p = q;    
  131.         }    
  132.     }    
  133.         
  134.         
  135.     int main()    
  136.     {    
  137.         SeeDoctor();    
  138.         return 0;    
  139.     }    
  140. 运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值