数据结构之队列应用实例
2014-10-15 21:01
381 查看
<pre name="code" class="cpp">#include "stdafx.h" #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <time.h> typedef struct qnode { int data; struct qnode *next; }QNode; typedef struct { QNode *front; QNode *rear; }QuType; //显示时间 void getTime() { time_t rawtime; struct tm * timeinfo; time ( &rawtime );//// 获取时间,以秒计,从1970年1月一日起算,存于rawtime timeinfo = localtime ( &rawtime );////转为当地时间,tm 时间结构 //printf ( "时间:%s", asctime (timeinfo) );//转为标准ASCII时间格式: printf("%d-%d-%d %d:%d:%d",timeinfo->tm_year+1900,timeinfo->tm_mon+1,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec); } //主页面显示 void DispWindow() { printf("\n"); printf("**************************************\n"); printf("** 病人就诊系统 **\n"); printf("** **\n"); printf("** 1--排队 **\n"); printf("** 2--就诊 **\n"); printf("** 3--查看排队 **\n"); printf("** 4--取消排队 **\n"); printf("** 5--下班 **\n"); printf("**************************************\n"); getTime(); printf("\n"); printf(" >>"); } //释放链队 void Destroyqueue(QuType *&qu) { QNode *p, *q; p = qu->front; if (p != NULL) {//若链队不为空,则释放所有节点 q = p->next; while (q != NULL) { free(p); p = q; q = q->next; } free(p); p = NULL; } free(qu);//释放链队节点 qu = NULL; } //清空缓冲区 void clean() { // fflush(stdin);//清除缓冲区内容(不可移植,gcc不支持) char c; while ((c = getchar()) != '\n' && c != EOF);//清除缓冲区内容 } void seeDoctor() { int sel;//菜单选项 int flag = 1; int find; int no;//病例号 int count = 0;//病人人数 QuType *qu; QNode *p; //创建空队列 qu = (QuType*)malloc(sizeof(QuType)); if (NULL == qu) { exit(0);//分配出错则退出 } qu->front = qu->rear = NULL; while (flag == 1) { DispWindow();//显示菜单 if(1 == (scanf("%d", &sel))) { switch (sel) { case 1: printf(" >>输入病例号:"); do { if (1 == (scanf("%d", &no))) { find = 0; p = qu->front; //查找病例号 while (p != NULL && !find) { if (p->data == no) { find = 1; }else { p = p->next; } } if (find) { printf (" >>病例号重复,重新输入:"); clean();//清空缓冲区 }else { count++;//人数增加 } }else { printf(" >>输入错误,重新输入!"); } }while (1 == find); //创建新节点 p = (QNode*)malloc(sizeof(QNode)); if (NULL == p) { exit(0);//分配出错,退出 } p->data = no; p->next = NULL; if (NULL == qu->rear) { qu->front = qu->rear = p;//仅有一个节点 }else { //将*p节点插入到队尾 qu->rear->next = p; qu->rear = p; } break; case 2: if (NULL == qu->front) {//如果队列为空 printf(" >>没有排队的病人!"); }else { p = qu->front; printf(" >>病人%d就诊\n", p->data); if (qu->rear == p) {//只有一个病人 qu->front = qu->rear = NULL; }else { qu->front = p->next; free(p); p = NULL; } } if (count > 0) { count--;//排队病人减少 }else { count = 0; } break; case 3: if (NULL == qu->front) {//如果队列为空 printf(" >>没有排列的病人\n"); }else {//显示所有排队病人 p = qu->front; printf(" >>共有%d个病人在排队\n",count); printf(" >>排队病人:"); while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } break; case 4:if (NULL == qu->front) {//队为空 printf(" >>没有排列的病人\n"); }else { p = qu->front; printf(" >>共有%d个病人在排队\n",count); printf(" >>病人按以下顺序就诊:"); while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } Destroyqueue(qu);//就诊结束,释放队列 flag = 0; break; case 5:if (NULL == qu->front) {//如果队为空 printf(" >>请排队的病人明天就医\n"); } flag = 0; Destroyqueue(qu); break; default : printf(" >>输入错误!\n");break; }//switch语句结束 }else { printf(" >>输入错误!\n"); } clean();//清空缓冲区 }//总循环结束 } int main() { seeDoctor(); return 0; }
相关文章推荐
- PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
- 数据结构之循环队列和栈的应用
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- (三)实际项目中数据结构—队列的应用
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- JavaScript数据结构与算法之队列原理与用法实例详解
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之链式队列与链式栈的应用-球钟问题
- java 数据结构中栈结构应用的两个实例
- java 数据结构中栈和队列的实例详解
- 数据结构实验项目三:队列的基本操作应用
- 数据结构之队列的应用
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果