第七周项目5 排队看病模拟(改进版)

/*
 *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;
}

运行结果:

第七周项目5 排队看病模拟(改进版)_第1张图片

知识点总结:

  与老师所给程序不同,我个人是利用链式队列算法库进行构造的,主函数有较大的改动,可能有一些不足的地方,还望指出,如果有谁可以进一步提升功能那就再好不过了。



你可能感兴趣的:(排队看病)