• 队列


    1、队列的定义

    队列,简称队,它是一种操作受限的线性表,其限制在表的一端进行插入,另一端进行删除。可进行插入的一端称为队尾(rear),可进行删除的一端称为队头(front)。向队中插入元素叫入队,新元素进入之后就称为新的队尾元素。从队中删除元素叫出队,元素出队后,其后继结点元素就称为新的队头元素。

    2、队列的特点

    队的特点就是先进先出(栈为先进后出)。排队买票,排在前面的,先拿到票,排在后面的必须等待着前面买完票,才能轮到他买票。

    3、队列的存储结构

    队列按存储结构可分为链队和顺序队两种。

    先说一下顺序队列,如图:

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    typedef struct
    {
        int data[105];
        int front;
        int rear;
    }SeqQueue;
    void Init(SeqQueue *q)      //置空队列
    {
        q->front=q->rear=-1;
    }
    int EmptyQueue(SeqQueue *q)  //判断队列是否为空
    {
        if(q->front==q->rear)
            return 1;
        else
            return 0;
    }
    int  InQueue(SeqQueue *q,int x)  //进行入队
    {
        if(q->rear==105-1)
        {
            printf("队列已经满了!
    ");
            return 0;
        }
        q->rear++;
        q->data[q->rear]=x;
        return 1;
    }
    int OutQueue(SeqQueue *q)      //进行出队
    {
        if(q->front<0)
        {
            printf("队列已经为空!
    ");
            return 0;
        }
        q->front++;
        return q->data[q->front];
    }
    int main()
    {
        SeqQueue *q;
        q=(SeqQueue *)malloc(sizeof(SeqQueue));
        for(int i=1;i<=10;i++)
        {
    
            InQueue(q,i);
        }
        for(int i=1;i<=10;i++)
        {
            printf("%d ",OutQueue(q));
    
        }
    }
    

    循环队列:

     满:当队列添加元素到rear的下一个元素是front的时候,也就是转圈子要碰头了,我们就认为队列满了。(Q.rear+1)%MAXSIZE=Q.front

     空:当队列删除元素到front=rear的时候,我们认为队列空了。Q.rear==Q.front,不一定为0
    如图:

    代码实现:

    #include<bits/stdc++.h>
    using namespace std;
    #define MAX 105
    typedef struct
    {
        int data[MAX];
        int front;
        int rear;
    }SeqQueue;
    void Init(SeqQueue *q)      //置空
    {
        q->front=q->rear=-1;
    
    }
    int EmptyQueue(SeqQueue *q)   //判断是否为空
    {
        if(q->rear==q->front)
            return  1;
        else
            return  0;
    }
    int InQueue(SeqQueue *q,int x)    //进队
    {
        if((q->rear+1)%MAX==q->front)
        {
            printf("循环队列已经满了!
    ");
            return 0;
        }
        q->rear=(q->rear+1)%MAX;
        q->data[q->rear]=x;
        return 1;
    }
    int OutQueue(SeqQueue *q)     //出队
    {
        if(q->rear==q->front)
        {
            printf("队已经为空!
    ");
            return 0;
        }
        q->front=(q->front+1)%MAX;
        return q->data[q->front];
    
    }
    int main()
    {
        SeqQueue *q;
        q=(SeqQueue *)malloc(sizeof(SeqQueue));
        for(int i=1;i<=10;i++)
        {
            InQueue(q,i);
        }
        for(int i=1;i<=10;i++)
        {
            printf("%d ",OutQueue(q));
    
        }
    }
    
  • 相关阅读:
    jvm学习(重点)
    java单例模式之懒汉式分析
    spring中bean实例化时机以及整个运转方式
    servlet的总结
    NGINX location 在配置中的优先级
    java多态 以及静态绑定 动态绑定积累
    有关string stringbuff stringbuild 的区别
    java中静态变量,静态代码块,静态方法,实例变量,匿名代码块等的加载顺序
    java线程方面的知识
    Jmeter的接口测试简介
  • 原文地址:https://www.cnblogs.com/julyzqy/p/12777515.html
Copyright © 2020-2023  润新知