/* *Copyright (c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:kanbing.cpp *作者:朱希康 *完成日期:2015年10月28日 *版本号:vc++6.0 * *问题描述:排队看病模拟 *输入描述:编号和排队号 *程序输出:排队看病次序,下一个排队看病人的排队号 */
#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
#include <iostream> #include "head.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; } } }
#include "head.h" void InitQueue(LiQueue *&q) { q=(LiQueue *)malloc(sizeof(LiQueue)); q->front=q->rear=NULL; } void DestroyQueue(LiQueue *&q) { QNode *r,*p=q->front; 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) { return q->rear->data; } void enQueue(LiQueue *&q,ElemType e) { QNode *p; p=(QNode *)malloc(sizeof(QNode)); p->data=e; p->next=NULL; if(q->rear==NULL) q->rear=q->front=p; else { q->rear->next=p; q->rear=p; } } bool deQueue(LiQueue *&q,ElemType &e) { QNode *t; t=q->front; if(q->rear==NULL) return false; if(q->rear==q->front) q->rear=q->front=NULL; else { q->front=q->front->next; } e=t->data; free(t); return true; }
运行结果:
知识点总结:
与老师所给程序不同,我个人是利用链式队列算法库进行构造的,主函数有较大的改动,可能有一些不足的地方,还望指出,如果有谁可以进一步提升功能那就再好不过了。