zoukankan      html  css  js  c++  java
  • 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 【转发请务必保留原作者,否则保留追责权利】
  • 相关阅读:
    C++中使用多线程
    hdu 4223 dp 求连续子序列的和的绝对值最小值
    hdu 1372 bfs 计算起点到终点的距离
    hdu 4217 线段树 依次取第几个最小值,求其sum
    心得
    hdu 1175 bfs 按要求进行搜索,是否能到达,抵消两个(相同)棋子
    hdu 4221 greed 注意范围 工作延期,使整个工作时间罚时最少的单个罚时最长的值
    hdu 2844 多重背包 多种硬币,每一种硬币有一点数量,看他能组成多少种钱
    uva LCDDisplay
    hdu 4218 模拟 根据一个圆点和半径画一个圆 注意半径要求
  • 原文地址:https://www.cnblogs.com/newtol/p/10159128.html
Copyright © 2011-2022 走看看