- /*
- *Copyright (c) 2016,烟台大学计算机学院
- *All rights reserved.
- *文件名称:houzhuibiaodashi.cpp
- *作者:衣龙川
- *完成日期:2016年10月20日
- *版本号: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;
- }
运行结果:
知识点总结:
与老师所给程序不同,我个人是利用链式队列算法库进行构造的,主函数有较大的改动,可能有一些不足的地方,还望指出,如果有谁可以进一步提升功能那就再好不过了。
- #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;
- }
运行结果:
知识点总结:
与老师所给程序不同,我个人是利用链式队列算法库进行构造的,主函数有较大的改动,可能有一些不足的地方,还望指出,如果有谁可以进一步提升功能那就再好不过了。