项目 5 - 排队看病模拟(队列)
来源:互联网 发布:香港大学计算机 知乎 编辑:程序博客网 时间:2024/05/16 03:36
/*
*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 100int 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; } }}
总结:
利用队列的方法,简单的反映病人到医院看病,排队看医生的情况。
0 0
- 项目 5 - 排队看病模拟(队列)
- 项目5 排队看病模拟
- 项目5-排队看病模拟
- 第7周项目5-排队看病模拟(队列)
- 第七周实践项目5 排队看病模拟(队列)
- 第七周项目5排队看病模拟
- 第七周-项目5 -排队看病模拟
- 第七周 项目5-排队看病模拟
- 第七周 项目5-排队看病模拟
- 第七周项目5--排队看病模拟
- 第七周项目5--排队看病模拟
- 第七周项目5-排队看病模拟
- 第七周项目5-排队看病模拟
- 第七周项目5-排队看病模拟
- 第七周项目5--排队看病模拟
- 第七周项目5排队看病模拟
- 第七周项目5-排队看病模拟
- 第七周项目5-排队看病模拟
- CI框架获取post和get参数
- CentOS 6.5 安装java以及maven
- 读书笔记
- 二叉树系列---求所有从根到叶子路径组成的数的和
- 从TCP三次握手说起–浅析TCP协议中的疑难杂症(2)
- 项目 5 - 排队看病模拟(队列)
- 普通盒子模型
- 【51NOD 1622】【51NOD 算法马拉松19】集合对
- EFProf Entity Framework Profile 工具 现在都用ORM Profiler,官方提供的,1.5版本了
- Makefile详解-隐含规则
- poj3104(二分判断可行性)
- php模拟post请求,实现手机短信验证
- GC算法
- 大数据之Hive(笔记二)