第七周项目5-排队看病模拟

来源:互联网 发布:淘宝网男士皮欧上衣 编辑:程序博客网 时间:2024/05/23 00:27

问题及代码:

/*  Copyright (c)2016,烟台大学计算机与控制工程学院  All rights reserved.  文件名称:sss.cpp  作    者: 李晓钰 完成日期:2016年10月20日  版 本 号:v1.0  问题描述: 编写一个程序,反映病人到医院看病,排队看医生的情况。在病人排队过程中,主要重复两件事:        (1)病人到达诊室,将病历本交给护士,排到等待队列中候诊。        (2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。        要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说明如下:        (1)排队——输入排队病人的病历号,加入到病人排队队列中。        (2)就诊——病人排队队列中最前面的病人就诊,并将其从队列中删除。        (3)查看排队——从队首到队尾列出所有的排队病人的病历号。        (4)不再排队,余下顺序就诊——从队首到队尾列出所有的排队病人的病历号,并退出运行。        (5)下班——退出运行,提示未就诊的病人明天再来。  输入描述:根据菜单提示选择  程序输出:各指令结果  */    


代码:

#include <stdio.h>    #include <malloc.h>    typedef struct qnode    {        int data;        struct qnode *next;    } QNode;            /*链队结点类型*/            typedef struct    {        QNode *front,*rear;    } QuType;           /*链队类型*/            void SeeDoctor()    {        int sel,flag=1,find,no;        QuType *qu;        QNode *p,*q;        qu=(QuType *)malloc(sizeof(QuType));    /*创建空队*/        qu->front=qu->rear=NULL;        while (flag==1)                             /*循环执行*/        {            printf("1:排队 2:就诊 3:查看排队 4.不再排队,余下依次就诊 5:下班  请选择:");            scanf("%d",&sel);            switch(sel)            {            case 1:                printf("  >>输入病历号:");                do                {                    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("  >>输入的病历号重复,重新输入:");                }                while (find==1);                p=(QNode *)malloc(sizeof(QNode));   /*创建结点*/                p->data=no;                p->next=NULL;                if (qu->rear==NULL)                 /*第一个病人排队*/                {                    qu->front=qu->rear=p;                }                else                {                    qu->rear->next=p;                    qu->rear=p; /*将*p结点入队*/                }                break;            case 2:                if (qu->front==NULL)                /*队空*/                    printf("  >>没有排队的病人!\n");                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);                }                break;            case 3:                if (qu->front==NULL)            /*队空*/                    printf("  >>没有排列的病人!\n");                else                            /*队不空*/                {                    p=qu->front;                    printf("  >>排队病人:");                    while (p!=NULL)                    {                        printf("%d ",p->data);                        p=p->next;                    }                    printf("\n");                }                break;            case 4:                if (qu->front==NULL)            /*队空*/                    printf("  >>没有排列的病人!\n");                else                            /*队不空*/                {                    p=qu->front;                    printf("  >>病人按以下顺序就诊:");                    while (p!=NULL)                    {                        printf("%d ",p->data);                        p=p->next;                    }                    printf("\n");                }                flag=0;                         /*退出*/                break;            case 5:                if (qu->front!=NULL)            /*队不空*/                    printf("  >>请排队的病人明天就医!\n");                flag=0;                     /*退出*/                break;            }        }        p=qu->front;  //销毁队列        while (p!=NULL)        {            q = p->next;            free(p);            p = q;        }    }            int main()    {        SeeDoctor();        return 0;    }    



运行结果:


知识点总结:

链队的具体应用。

学习心得:

体会链队在实际生活中的应用。

0 0
原创粉丝点击