/*
*Copyright (c) 2016,烟台大学计算机学院
*All right reserved.
*文件名称:test.cpp
*作者:杨天瑞
*完成日期:2016年11月2日
*版本号:v1.4.2
*
* 问题描述:编写一个程序,反映病人到医院看病,排队看医生的情况。在病人排队过程中,主要重复两件事:
(1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。
(2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。
要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说明如下:
(1)排队——输入排队病人的病历号,加入到病人排队队列中。
(2)就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。
(3)查看排队——从队首到队尾列出所有的排队病人的病历号。
(4)不再排队,余下顺序就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行。
(5)下班——退出运行,提示未就诊的病人明天再来。
*程序输入:输入病人需求情况。
*程序输出:病人需求结果回应。
*Copyright (c) 2016,烟台大学计算机学院
*All right reserved.
*文件名称:test.cpp
*作者:杨天瑞
*完成日期:2016年11月2日
*版本号:v1.4.2
*
* 问题描述:编写一个程序,反映病人到医院看病,排队看医生的情况。在病人排队过程中,主要重复两件事:
(1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。
(2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。
要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说明如下:
(1)排队——输入排队病人的病历号,加入到病人排队队列中。
(2)就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。
(3)查看排队——从队首到队尾列出所有的排队病人的病历号。
(4)不再排队,余下顺序就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行。
(5)下班——退出运行,提示未就诊的病人明天再来。
*程序输入:输入病人需求情况。
*程序输出:病人需求结果回应。
*/
r.h:
#ifndef LIQUEUE_H_INCLUDED
#define LIQUEUE_H_INCLUDED
#include<malloc.h>
typedef int ElemType;
typedef struct qnode
{
ElemType data;
struct qnode *next;
} QNode; //链队数据结点类型定义
typedef struct
{
QNode *front;
QNode *rear;
} LiQueue; //链队类型定义
void InitQueue(LiQueue *&q); //初始化链队
void DestroyQueue(LiQueue *&q); //销毁链队
bool QueueEmpty(LiQueue *q); //判断链队是否为空
int QueueLength(LiQueue *q); //返回队列中数据元素个数
void enQueue(LiQueue *&q,ElemType e); //入队
bool deQueue(LiQueue *&q,ElemType &e); //出队
#endif // LIQUEUE_H_INCLUDED
t.cpp:
#include <stdio.h>
#include <malloc.h>
#include "r.h"
void InitQueue(LiQueue *&q) //初始化链队
{
q=(LiQueue *)malloc(sizeof(LiQueue));
q->front=q->rear=NULL;
}
void DestroyQueue(LiQueue *&q) //销毁链队
{
QNode *p=q->front,*r; //p指向队头数据节点
if (p!=NULL) //释放数据节点占用空间
{
r=p->next;
while (r!=NULL)
{
free(p);
p=r;
r=p->next;
}
}
free(p);
free(q); //释放链队节点占用空间
}
bool QueueEmpty(LiQueue *q) //判断链队是否为空
{
return(q->rear==NULL);
}
int QueueLength(LiQueue *q) //返回队列中数据元素个数
{
int n=0;
QNode *p=q->front;
while (p!=NULL)
{
n++;
p=p->next;
}
return(n);
}
void enQueue(LiQueue *&q,ElemType e) //入队
{
QNode *p;
p=(QNode *)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
if (q->rear==NULL) //若链队为空,则新节点是队首节点又是队尾节点
q->front=q->rear=p;
else
{
q->rear->next=p; //将*p节点链到队尾,并将rear指向它
q->rear=p;
}
}
bool deQueue(LiQueue *&q,ElemType &e) //出队
{
QNode *t;
if (q->rear==NULL) //队列为空
return false;
t=q->front; //t指向第一个数据节点
if (q->front==q->rear) //队列中只有一个节点时
q->front=q->rear=NULL;
else //队列中有多个节点时
q->front=q->front->next;
e=t->data;
free(t);
return true;
}
main.cpp:
#include <iostream>
#include "r.h"
#include<stdio.h>
#define N 100
int main()
{
LiQueue *qu;
ElemType a,no,ne[N],i=0;
InitQueue(qu);
while(1)
{
printf("1.排队 2.就诊 3.查看排队 4.不再排队,余下依次就诊 5.下班");
printf("\n");
printf("请选择:");
scanf("%d",&a);
switch(a)
{
case 1:
{
printf(">>输入病历号:");
scanf("%d",&no);
enQueue(qu,no);
}
break;
case 2:
{
printf(">>病人");
deQueue(qu,no);
printf("%d",no);
printf("就诊");
printf("\n");
}
break;
case 3:
{
printf(">>排队病人:");
while(!QueueEmpty(qu))
{
deQueue(qu,ne[i]);
printf("%d ",ne[i]);
i++;
}
printf("\n");
}
break;
case 4:
{
printf(">>病人按以下顺序就诊:");
for(int j=0; j<i; j++)
{
printf("%d ",ne[j]);
}
printf("\n");
}
break;
default:
a=5;
/*case 5:
{
printf("下班");
printf("\n");
}
break;
}*/
printf("下班");
printf("\n");
return 0;
}
}
}
总结:
利用队列的方法,简单的反映病人到医院看病,排队看医生的情况。
版权声明:本文为Foreigner_Y原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。