NoneLeZ 2020-04-05 10:24 采纳率: 50%
浏览 423
已采纳

医院排队就诊问题(C语言实现)求大神帮忙查看一下如何修改这些错误 (续)

问题描述:
医院急诊科室,有医生1名
现有病人7名,先后到达
病人病情轻重各有不同(分3级,3级最重,1级最轻),重症的优先就诊;病症相同的,先来的先就诊。
模型假设:
1.病人挂完号后进入对应的科室,每位病人属性包括姓名,性别,和身份证号
2.一开始的时候,医生空闲(等待病人)。
3.有护士根据病人病情,给出病情优先级后,再排队。
4.排队的病人按照先后次序排队,重症的优先就诊,病症相同的,先来的先就诊。。
5.一位医生每次只能看一个病人。
解决方案模型:
1. 程序模拟医院排队就诊,程序开始输入病人资料(包括优先级,姓名,性别,和身份证号)。
2. 设置一个病人的优先队列,按照优先级由高到低,分段排队,最开头的是优先级最高的病人;如果优先级相同,那么按照先来后到的顺序排队。
3. 对病人队列有两种操作,pop与push,医生每次从病人队列里面pop一个病人,并打印病人信息(包括优先级,姓名,性别,和身份证号),直到队列空。

  • 请大佬继续补充回答
  • 写回答

2条回答 默认 最新

  • 白色一大坨 2020-04-05 16:16
    关注
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<windows.h>
    #define MAXSIZE 100
    typedef struct ElemType
    {
        int level;
        char name[20];
        char gender;
        char ID[20];
    
    }QelemType;
    typedef struct{
        QelemType *base;
        int front;
        int rear;
    }squene;
    void Initquene(squene *s){
        s->base=(QelemType *)malloc(MAXSIZE * sizeof(QelemType));
        if(!s->base)
            exit(-1);
        s->front=0;
        s->rear=0;
    }
    void enquene(squene *s,QelemType e){
        if((s->rear+1)%MAXSIZE==s->front){
            printf("duimanb");
            exit(0);
        }
        s->base[s->rear]=e;
        s->rear=(s->rear+1)%MAXSIZE;
    }
    void dequene(squene *s,QelemType *e){
        if(s->rear==s->front){
            printf("栈空");
            exit(-1);
        }
        *e=s->base[s->front];
        s->front=(s->front+1)  % MAXSIZE;
    }
    int length(squene s){
        return (s.rear-s.front+MAXSIZE) % MAXSIZE;
    }
    
    int main()
    {
        int i,j;
        int n;
        squene Q1;
        QelemType *e,t;
        Initquene(&Q1);
        printf("请输入前来就诊的病人数量:");
        scanf("%d",&n);
        e = (QelemType *)malloc(n*sizeof(QelemType));
        for(i=0;i<n;i++)
        {
            printf("\n请输入第%d个病人的优先级:",i+1);
            scanf("%d",&e[i].level);
            printf("\n请输入第%d个病人的姓名:",i+1);
            scanf("%s",e[i].name);
            fflush(stdin);
            printf("\n请输入第%d个病人的性别:",i+1);
            scanf("%c",&e[i].gender);
            printf("\n请输入第%d个病人的身份证:",i+1);
            scanf("%s",e[i].ID);
        }
    
        for (i=0;i<n-1;i++)
        {
            for (j=0;j<n-i-1;j++)
            {
                if (e[j].level<e[j+1].level)
                {
                    t = e[j];
                    e[j] = e[j+1];
                    e[j+1] = t;
                }
            }
        }
    
        for (i=0;i<n;i++)
        {
            enquene(&Q1,e[i]);
        }
    
        for (i=0;i<n;i++)
        {
            dequene(&Q1,&t);
            printf("办理业务 姓名:%s,身份证号:%s,性别:%c,优先级:%d\n", t.name,t.ID, t.gender,t.level);
        }
    
        free(e);
        e=NULL;
        system("pause");
        return 0;
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记