循环队列的复习

Posted stupid_one

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环队列的复习相关的知识,希望对你有一定的参考价值。

技术分享
struct MyQueue { //循环队列需要少用一个
    int que[1000000], head, tail, MXSIZE;
    void init() {
        MXSIZE = 1000000; // 1e6
        head = tail = 0;
    }
    bool isEmpty() {
        return head == tail;
    }
    bool isFull() {
        return (tail + 1) % MXSIZE == head;
    }
    void add_back(int val) {
        if (isFull()) assert(false);
        que[tail] = val;
        tail = (tail + 1) % MXSIZE;
    }
    int del_front() {
        if (isEmpty()) assert(false);
        int cur = que[head];
        head = (head + 1) % MXSIZE;
        return cur;
    }
} que;
View Code

做题的时候感觉需要循环队列,不然炸内存,也不用stl,慢

然后自己写了一个,发现忘记了。T_T

主要是判断full和empty那里,可以知道head == tail就是empty了,但是如果你的队列大小是6,你也想装6个元素,那么head == tail也是满的一个条件。

为了解决这个,只能是少用一个了,6个的大小,用5个。

这样,当(tail + 1) % 6 == head,就是满了的标志

 

以上是关于循环队列的复习的主要内容,如果未能解决你的问题,请参考以下文章

2023数据结构考研复习-栈队列和数组

Java数据结构——队列

Java数据结构——队列

Java用数组实现循环队列

[NEFU 数据结构]阶段一复习

栈和队列知识点总结