数据结构二------循环队列实现医院候诊诊治系统

来源:互联网 发布:起英文名的软件 编辑:程序博客网 时间: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;}


运行效果图:




原创粉丝点击