• 数据结构实验二(2) 简单模拟病人看病过程


    ★观前提示:本篇内容为数据结构实验,代码内容经测试没有问题,但是可能会不符合每个人实验的要求,因此以下内容建议仅做思路参考。

    一、实验目的

    掌握栈与队列的基本结构和操作方法,并能利用其解决实际问题。

    二、实验要求

    1️⃣实验背景
    编写一个程序,反映病人到医院看病排队看医生的情况,在病人排队过程中,主要重复两件事:

    ①病人到达诊室,将病历交给护士,,排到等待队列中侯诊

    ②护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊

    2️⃣实验要求

    模拟病人等待就诊这一过程,程序采用菜单式,其选项和功能说明如下:

    • ①排队↔输入排队病人的病历号,加入到病人排队队列中
    • ②就诊↔病人排队队列中最前面的病人就诊,将其从队列中删除
    • ③查看排队↔从队首到队尾理出所有的排队病人的病历号
    • ④不在排队,余下依次就诊↔从队首到队尾列出所有的排队病人的病历号,并退出运行
    • ⑤下班↔退出运行
    • ⑥上班↔初始化排队队列

    ★温馨提示:以下代码均为改正过的代码,皆已经过测试。

    三、源码实现

    #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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127

    四、实验总结

    ① 通过本次实验,掌握了栈与队列的基本结构与操作方法;
    ② 通过多次尝试对栈和队列的代码实现,最终成功地解决了这两个应用类问题。
    ③ 明白了栈和队列的在这两题应用中体现的逻辑,掌握了栈和队列的一些基本操作如:初始化入栈、出栈、入队、出队等;

    2022.5.21记录:Code_流苏(CSDN)
    如有任何疑问,评论回复,看到即回,欢迎大家多多交流学习!
    ★以上实验内容仅供参考。

  • 相关阅读:
    生成完美口型同步的 AI 数字人视频
    LQ0048 交换瓶子【无标题】
    高等数学(第七版)同济大学 习题7-4 个人解答
    Java学习06——运算符
    Mysql -- 管理工具
    Elasticsearch:什么是 DevOps?
    将设计思维应用于人工智能
    【frida】HLL 登录流程分析 找关键 Call
    AntiSamy防跨站脚本攻击(XSS)快速入门
    java毕业生设计在线教育平台计算机源码+系统+mysql+调试部署+lw
  • 原文地址:https://blog.csdn.net/qq_51646682/article/details/124896978