• C语言实现对队列的基本操作


    C语言实现对队列的基本操作

    代码思想:

    (1)定义循环队列:rear指针指向队列的最后一个元素所在位置,front指针则指向第一个元素的前一个位置。并且rear和front都只能单方向移动。
    (2)入队操作:先判断队列是否溢出->在队尾插入需要插入的元素作为新的队尾。
    (3)出队和取队头操作:判断队列是否为空->删除队头元素,并返回该元素->front+1;

    代码实现的功能:

    1.插入队列 2.取出队列 3.取出队头元素 4.判断是否为空队列 5.清空该队列

    代码内容:

    #include<stdio.h>
    #include<stdlib.h>
    typedef int boolean;
    #define true 1
    #define false 0
    typedef struct queue{
        int element[50];
        int rear;
        int front;
    }*Squeue,Queue;
    void InsQueue(Squeue q){
        int num,i=0,record=0;
        printf("请输入您想入队的元素个数:");
        scanf("%d",&num);
        for(i;i<num;i++)
        {
            printf("请输入第%d个元素:",i+1);
            if(++q->rear<=9)
            {
                if(q->rear==q->front&&record==1)
                {
                    printf("数据溢出
    ");
                    system("pause");
                    exit(1);
                }
                else if(q->rear==q->front)
                {
                    record++;
                }
                scanf("%d",&q->element[q->rear]);
            }
            else
            {
                q->rear-=10;
                scanf("%d",&q->element[q->rear]);
                if(q->rear==q->front)
                {
                    printf("数据溢出
    ");
                    system("pause");
                    exit(1);
                }
            }
        }
    }
    void DelQueue(Squeue q){
        if(IsEmpty(q)){
            printf("不存在队列
    ");
            q->front=0;
        }else{
            printf("队列为:");
            do{
                printf("%d-->",q->element[q->front]);
                q->front++;
            }while(!IsEmpty(q));
            printf("end
    ");
        }
    }
    void GetFront(Squeue q)
    {
        int i;
        if(IsEmpty(q))
            printf("不存在该队列
    ");
        else
          printf("队首元素为:%d
    ",q->element[q->front]);
    
    }
    boolean IsEmpty(Squeue q){
        if(q->rear==-1||q->front-1==q->rear)
            return true;
        else
            return false;
    }
    void EnEmpty(Squeue q){
        q->front=0;
        q->rear=-1;
        printf("sucess!
    ");
    }
    void main(){
        int input;
        Squeue q;
        q=(Squeue)malloc(sizeof(Queue));
        q->front=0;
        q->rear=-1;
        while(1)
        {
            printf("1.Insert Queue
    ");
            printf("2.Get Queue
    ");
            printf("3.Get   Front
    ");
            printf("4.IS queue empty?
    ");
            printf("5.Clear Queue
    ");
            printf("6.Exit
    ");
            scanf("%d",&input);
            switch(input)
            {
            case 1:
                InsQueue(q);
                break;
            case 2:
                DelQueue(q);
                break;
            case 3:
                GetFront(q);
                break;
            case 4:
                if(IsEmpty(q))
                    printf("不存在该队列
    ");
                else
                    printf("存在该队列
    ");
                break;
            case 5:
                EnEmpty(q);
                break;
            case 6:
                exit(0);
            default :
                    printf("input error!
    ");
                    break;
            }
        }
    }

    测试截图:
    1.插入和取出队列:
    这里写图片描述
    2.取队头元素:
    这里写图片描述
    3.判断是否为空队列:
    这里写图片描述

    博客园:https://www.cnblogs.com/newtol 微信公众号:Newtol 【转发请务必保留原作者,否则保留追责权利】
  • 相关阅读:
    python 冒泡排序
    数组
    git用法
    Leetcode 344. 反转字符串
    Leetcode 83. 删除排序链表中的重复元素
    【第一部分】01Leetcode刷题
    【C++ Primer | 07】常用算法
    【第一部分】10Leetcode刷题
    【第一部分】09Leetcode刷题
    【第一部分】07Leetcode刷题
  • 原文地址:https://www.cnblogs.com/newtol/p/10159128.html
Copyright © 2020-2023  润新知