僅使用隊列標準操作(push/pop/peek/empty/size)實現棧:
push(x):元素入棧頂pop():移除棧頂元素top():返回棧頂元素empty():判斷棧是否為空與「用棧實現隊列」對稱。隊列 FIFO,棧 LIFO。利用兩個隊列:
q_main:主隊列,push 直接入隊q_aux:輔助隊列,pop/top 時將 q_main 除最後一個元素外全部倒入 q_aux,最後一個即為棧頂操作細節:
push(x):q_main.push(x) — O(1)pop():倒入 q_main.size()-1 個到 q_aux,彈出 q_main 最後一個,交換兩隊列 — O(n)top():同 pop 但將最後一個也入 q_aux 再交換 — O(n)empty():q_main.empty()class Stack {
public:
std::queue q_main, q_aux;
void push(int x) {
q_main.push(x);
}
void pop() {
if (q_main.size() == 1) {
q_main.pop();
} else {
while (q_main.size() > 1) {
q_aux.push(q_main.front());
q_main.pop();
}
q_main.pop();
while (!q_aux.empty()) {
q_main.push(q_aux.front());
q_aux.pop();
}
}
}
int top() {
if (q_main.size() == 1) return q_main.front();
while (q_main.size() > 1) {
q_aux.push(q_main.front());
q_main.pop();
}
int val = q_main.front();
q_aux.push(q_main.front());
q_main.pop();
while (!q_aux.empty()) {
q_main.push(q_aux.front());
q_aux.pop();
}
return val;
}
bool empty() {
return q_main.empty();
}
};
push O(1),pop/top O(n) — 無攤銷優化空間push 後旋轉隊列使新元素到隊首,但本題要求雙隊列演示std::stack/deque「用隊列實現棧」展示了 FIFO 如何模擬 LIFO,掌握「主輔隊列 + 保留最後一個」模式,深化數據結構操作本質理解。