数据结构二------循环队列实现医院候诊诊治系统
来源:互联网 发布:起英文名的软件 编辑:程序博客网 时间:2024/06/11 02:31
只要代码如下:
/***** 数据结构实验二 ********//******** written by C_Shit_Hu ************/////////////////采用循环队列实现////////////////****************************************************************************//* 空队列:front == rear满队列:q.rear + 1) % INIT_SQ_QUEUE_LEN == q.front伪队头指针:pfront非空队列中,front始终指向队列头元素,rear始终指向队列尾元素的下一个位置。判断循环队列是否充满,有两种方法:1. 设立一个标记,当front==rear时,用于标示队列是空还是满,比如当前队列元素个数等。2. 少用一个空间,如果rear后一位置是front时则认为是满。*//****************************************************************************/#include <iostream>#include <stdlib.h>#include <malloc.h>using namespace std;#define INIT_SQ_QUEUE_LEN 100 typedef int node_type;typedef struct __sq_queue_st {node_type *base;node_type pfront;int front;int rear;} sq_queue_st;void init_sq_queue(sq_queue_st &q); // 初始化循环链表函数int en_queue(sq_queue_st &q); // 插入元素调用函数int de_queue(sq_queue_st &q); // 删除元素int quene_lenght(sq_queue_st &q); // 返回长度int queue_empty(sq_queue_st &q); // 判断是否为空void quene_trvase(sq_queue_st &q); // 链表遍历输出// 初始化void init_sq_queue(sq_queue_st &q){q.base = (node_type *)malloc(sizeof(node_type) * INIT_SQ_QUEUE_LEN);if(!q.base) exit(1);q.front = q.rear = 0;}// 插入int en_queue(sq_queue_st &q, node_type data){int i, len;if((q.rear + 1) % INIT_SQ_QUEUE_LEN == q.front)return -1; len = quene_lenght(q);q.pfront = q.front;for (i=1; i<=len && (q.pfront) % INIT_SQ_QUEUE_LEN != (q.rear+1); i++, q.pfront++ ){if (q.base[q.pfront] == data ){printf(">>病人%d已经在队列中,请不要重复排队!\n", data);return -1;exit(1);}}q.base[q.rear] = data;q.rear = (q.rear + 1) % INIT_SQ_QUEUE_LEN;cout << ">>病人"<< data <<"排队成功。\n"; len = quene_lenght(q);printf(">>此时的循环队列长度为:%d.\n", len);return 0;}// 删除int de_queue(sq_queue_st &q){//int data;if(q.rear == q.front){cout <<">>没有人排队哦。\n";return -1;}//q.pfront = q.front;//data = q.base[q.front];cout << ">>病人" <<q.base[q.front]<< "正在就诊\n";q.front = (q.front+1) % INIT_SQ_QUEUE_LEN;return 0;}// 长度int quene_lenght(sq_queue_st &q){return (q.rear - q.front + INIT_SQ_QUEUE_LEN) % INIT_SQ_QUEUE_LEN;}// 判空int queue_empty(sq_queue_st &q){return q.front == q.rear;}// 遍历void quene_trvase(sq_queue_st &q){int i, len;len = quene_lenght(q);cout << ">>共有"<< len <<"个人正在排队,依次是:\n >>病人: ";q.pfront = q.front;for (i=1; i<=len && (q.pfront) % INIT_SQ_QUEUE_LEN != (q.rear+1); i++, q.pfront++ ) cout << q.base[q.pfront] << ' ';cout << endl ;}// 初始化void Sys_Init(){cout << "*************欢迎进入候诊系统*************" << endl;cout << "1:病人排队 2:病人就诊 \n3:查看排队 4.排队结束,依次就诊 \n5.下班 6.清屏并初始化系统"<< endl;cout << "**********本系统限定最大队列100人*********" << endl;}int main(){int sel, flag=1, num, i;sq_queue_st q;system("echo off");system("color 2");init_sq_queue(q);Sys_Init();while (flag==1) /*循环执行*/{lb:cout << ">>>>>>请选择相应的功能继续(输入序号):" ;cin >> sel;if (sel>6 || sel <=0){cout << "您输入选项不正确!" << endl;goto lb;} switch(sel) {case 1:{cout << " >>>>请输入病历号:";cin >> num;en_queue(q, num); }break;case 2:{de_queue(q); }break;case 3:{if (queue_empty(q))cout << ">>没有人排队哦." << endl;elsequene_trvase(q) ; }break;case 4:{cout << ">>排队结束,请按照先后顺序诊治!\n" << endl;flag = 0;quene_trvase(q); }break;case 5:{cout << ">>下班时间到咯。请余下的病人,明天再来!" << endl; }break;case 6:{system("cls");Sys_Init(); if(!queue_empty(q))de_queue(q);}break;}}/*while(!queue_empty(&q)) {de_queue(&q, &i);printf("%d\n", i);}*/return 0;}
运行效果图:
- 数据结构二------循环队列实现医院候诊诊治系统
- 医院排队候诊模型
- 看病候诊(队列)
- 数据结构:循环队列(二)
- 数据结构:循环队列--Java实现
- 数据结构循环队列Java实现
- 数据结构-循环数组实现队列
- 数据结构 -- 队列 & 循环队列 -- 数组实现
- 数据结构 二、队列的实现
- 【数据结构】队列-循环队列
- 【数据结构-队列】循环队列
- 数据结构(队列):循环队列
- 简单数据结构的实现之循环队列
- 数据结构的C实现_循环队列
- 数据结构循环队列的实现c程序
- 数据结构(C语言)实现循环队列
- 数据结构学习之循环队列c++实现
- 数据结构:队列(循环数组实现)
- SQL 2005创建数据库
- 存储过程练习
- Jorm使用JDBC式的Connection实现存储过程和函数的调用
- 准备工作-PPT母版
- qt 库没有被正确安装 请运行make install 问题的可能原因
- 数据结构二------循环队列实现医院候诊诊治系统
- collections
- 仿射变换
- Installation MariaDB5.5 on RHEL6
- C# using的用法介绍
- Linux中三种进程的区别分析
- Oracle创建表空间、创建用户以及授权、查看权限常用sql语句
- Nginx相对Apache优缺点、缓存优缺品析
- MATLAB中读取多幅图像