目的:掌握队列的算法设计。
内容:(1)编写一个程序exp2-9.cpp,反映病人到医院排队看医生的情况。在病人排队过程中候诊.
(2)护士从等待队列中国取出下一位病人的病历,该病人进入诊室就诊。
#include<stdio.h>
#include<stdlib.h>
typedef struct pnode //节点结构体
{
int medNum;
struct pnode* next;
} PatNode;
typedef struct //链队结点结构体
{
PatNode* front;
PatNode* rear;
} QuNode;
void line_up (QuNode*&q) //排队函数
{
PatNode*p;
p=(PatNode*)malloc(sizeof(PatNode));
printf(" 请输入排队病人病历号:");
scanf("%d",&p->medNum);
p->next=NULL;
if(q->rear==NULL)
q->front=q->rear=p;
else
{
q->rear->next=p;
q->rear=p;
}
}
void doctor (QuNode*&q) //就诊函数
{
PatNode*t;
if(q->front==NULL)
{
printf(" 当前没有病人排队!\n");
return ;
}
t=q->front;
printf(" 请病历号为%d的患者就诊\n",t->medNum);
if(q->front==q->rear)
q->front=q->rear=NULL;
else
q->front=q->front->next;
free(t);
}
void see_line(QuNode*&q) //查看排队
{
int num=1;
PatNode*p=(PatNode*)malloc(sizeof(PatNode));
if(p==NULL)
{
printf(" 当前没有病人排队\n");
return ;
}
for(p=q->front;p!=NULL;p=p->next)
{
printf(" 第%d位病人病历号:%d\n",num,p->medNum);
num++;
}
}
void no_line(QuNode*&q) //不再排队(输出所有排队的病历号)
{
PatNode*p=(PatNode*)malloc(sizeof(PatNode)),*s;
p=q->front;
while(p!=NULL)
{
s=p;
p=p->next;
printf(" 请病历号为%d的患者就诊\n",s->medNum);
free(s);
}
q->front=q->rear=NULL;
}
void menu()
{
printf(" ┏━━━━━━━━┓\n");
printf(" ┃ 菜单 ┃\n");
printf(" ┠┄┄┄┄┄┄┄┄┨\n");
printf(" ┠输入1:排队 ┃\n");
printf(" ┠输入2:就诊 ┃\n");
printf(" ┠输入3:查看排队 ┃\n");
printf(" ┠输入4:不再排队 ┃\n");
printf(" ┠输入5:下班 ┃\n");
printf(" ┗━━━━━━━━┛\n\n");
}
void main()
{
menu();
int T=0,option; //辅助变量T,输入的选项序号option
QuNode*q=(QuNode*)malloc(sizeof(QuNode));
q->front=q->rear=NULL;
for(;;)
{
printf("请输入选项序号: ");
scanf("%d",&option);
switch(option)
{
case 1:
line_up(q);
break;
case 2:
doctor(q);
break;
case 3:
see_line(q);
break;
case 4:
no_line(q); //题目要求输入4后剩下所有患者就诊,并且结束程序,∴执行完4后继续执行5
case 5: //选项5只要求了
T=1;
break;
default:
printf("选项序号输入错误,请重新输入!\n");
}
if(T)
break;
}
printf("程序运行结束!\n");
}