数组模拟队列



原题链接

数组模拟队列和数组模拟栈其实很类似,都是用一个数组来存储元素,用指针表示当前可以操作的位置。

区别就是栈只能在栈顶进行操作,所以只需要有一个top指针指向栈顶。
而队列可以在队头和队尾都进行操作(出队、入队),所以需要两个指针headtail指向队头和队尾。

如果有元素入队,则tail加一,指向新元素。
如果要出队,则head加一,指向原来队列的第二个元素,这个元素就是现在的对头。

具体代码如下:

#include<bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5;
int q[N], head, tail;            //用数组q模拟队列,head和tail分别指向队头和队尾

void init() {
    head = 0;                    //初始时head和tail都指向0,表示没有元素
    tail = 0;
}

void Push(int x) {
    q[++tail] = x;               //tail加一,新元素加在tail指针指向的位置
}

void Pop() {
    ++head;                    
}

int Query() {
    return q[head + 1];          //注意要有加一
}

string Empty() {
    if(head < tail) {
        return "NO";
    } else {
        return "YES";
    }
}

int main() {
    int M;
    cin >> M;
    init();
    while(M--) {
        string op;
        int x;
        cin >> op;
        if(op == "push") {
            cin >> x;
            Push(x);
        } else if(op == "empty") {
            cout << Empty() << endl;
        } else if(op == "query") {
            cout << Query() << endl;
        } else if(op == "pop") {
            Pop();
        }
    }
}

原文地址:https://www.cnblogs.com/linrj/p/13322200.html