美文网首页
医院就医排队队列链表用switch语句实现功能选项

医院就医排队队列链表用switch语句实现功能选项

作者: 依林_6cd2 | 来源:发表于2018-11-22 18:53 被阅读0次

    #include<stdio.h>

    #include<malloc.h>

    #include<stdbool.h>

    typedef struct qnode{                                              //创建一个链队节点类型

        int data;

        struct qnode *next;

    }DataNode;

    typedef struct{                                            //创建头尾节点类型

        DataNode *front;

        DataNode *rear;

    }LinkQuNode;

    LinkQuNode* InitQueue(LinkQuNode *q){                                  //创建头尾节点

        q = (LinkQuNode *)malloc(sizeof(LinkQuNode));

        q -> front = q -> rear = NULL;                          //将头尾节点都指向空

        return q;

    }

    LinkQuNode *enQueue(LinkQuNode *q, int *ill){                                  //创建一个入队函数

        DataNode *p;                               

        p = (DataNode *)malloc(sizeof(DataNode));              //申请一个节点空间

        p ->data = *ill;                                    //给这个节点的data赋值

        p -> next = NULL;                          //使节点中的指针部分指向空

        if(q -> rear == NULL)

            q -> front = q -> rear = p;            //首尾节点为空的情况下添加节点(入队元素)

        else{                                  //首尾节点不为空时添加节点

            q -> rear -> next = p;

            q -> rear = p;

        }

        return q;

    }

    bool deQueue(LinkQuNode *q, int* ill){                  //创建出对函数

        DataNode * t;                     

        if(q -> rear ==NULL)                            //当队列中没有元素时返回布尔类型false

            return false;

        t = q -> front;

        if(q -> front == q -> rear)                                //当队列中只有一个元素的时候出队元素

            q-> front = q->rear = NULL;

        else

            q -> front = q ->front ->next;                      //当队列中元素有多个时出对元素

        *ill = t -> data;

        free(t);                                    //释放空间

        return true;

    }

    void DestroyQueue(LinkQuNode *q){              //创建销毁队列函数

        DataNode * pre = q -> front, *p;

        if(pre != NULL){

            p = pre -> next;

            while(p != NULL){

                free(pre);

                pre  = p;

                p = pre -> next;

            }

            free(pre);                      //释放队列中节点的空间

        }

        free(q);

    }

    void CheckQueue(LinkQuNode *q){            //创建遍历队列函数

        DataNode *pre = q ->front;

        int number = 0;

        if(pre == NULL)

            printf("没有人在排队");            //当队列中没有元素时输出

        else

            while(pre -> next != NULL){            //当队列中有元素时

                printf("%d  ",pre -> data);

                ++number;

                pre = pre -> next;

            }

        if(pre ->next == NULL){

            printf("%d  ",pre -> data);            //当队列中只有一个元素时

            ++number;

        }

        printf("\n\n队列中共有%d个人在排队\n\n",number);                //输出队列中的元素个数

    }

    int main(void){

        bool result;

        LinkQuNode *q;     

        q = NULL;

        q=InitQueue(q);                        //调用初始化函数

        int e;

        int ill;

        int point4 = 0;

        for( ; ; ){                            //使程序无线循环

        printf("请输入您要选择的功能选项\n");

        printf("1.输入病历号进行排队\n2.就诊\n3.查看排队\n4.余下依次就诊不再进行排队\n5.下班\n6.解除不再排队功能限制\n");

        printf("\n请输入1-6中的选项其中之一:");

        scanf("%d",&e);

        if(e == 4)

            point4 = e;

        switch(e){

            case 1:

                if(point4 == 4){

                    printf("\n排队功能已经禁止使用请选择其他功能选项\n\n");

                    printf("*******************************************************************************\n\n\n");

                }

                else{

                    printf("\n请输入您的病历号");

                    scanf("%d",&ill);

                    q=enQueue(q, &ill);

                    printf("\n您已经进入排队序列,请耐心等候\n\n\n");

                    printf("*******************************************************************************\n\n\n");

                }

                break;

            case 2:

                result = deQueue(q, &ill);                      //调用输出函数

                if(result == false)

                    printf("\n队列中没有正在排队的人\n\n\n");

                else

                    printf("\n请病历号为%d的病人开始就医\n\n\n",ill);

                printf("********************************************************\n\n\n");

                break;

            case 3:

                printf("查询结果为:\n");

                CheckQueue(q);                          //调用遍历列表函数

                printf("*************************************\n\n\n");

                break;

            case 4:

                printf("已经禁止排队功能,其他功能正常使用\n");

                printf("*******************\n\n\n");

                break;

            case 5:

                printf("\n现在下班,所有人员不再就医\n\n\n");

                DestroyQueue(q);                    //调用销毁队列函数

                break;

            case 6:

                if(point4 == 0)

                    printf("您未开启禁止排队选项\n\n");

                else

                    printf("禁止排队功能限制已经解除\n\n");

                    printf("******************\n\n\n");

                break;

        }

        if(e == 6)

            point4 = 0;

        if(e == 5)

            break;

        }

    return 0;

    }

    相关文章

      网友评论

          本文标题:医院就医排队队列链表用switch语句实现功能选项

          本文链接:https://www.haomeiwen.com/subject/qpkrqqtx.html