陣列模擬佇列
阿新 • • 發佈:2020-07-16
陣列模擬佇列和陣列模擬棧其實很類似,都是用一個數組來儲存元素,用指標表示當前可以操作的位置。
區別就是棧只能在棧頂進行操作,所以只需要有一個top
指標指向棧頂。
而佇列可以在隊頭和隊尾都進行操作(出隊、入隊),所以需要兩個指標head
和tail
指向隊頭和隊尾。
如果有元素入隊,則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(); } } }