1. 程式人生 > 實用技巧 >陣列模擬佇列

陣列模擬佇列



原題連結

陣列模擬佇列和陣列模擬棧其實很類似,都是用一個數組來儲存元素,用指標表示當前可以操作的位置。

區別就是棧只能在棧頂進行操作,所以只需要有一個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();
        }
    }
}