假設我們有兩個堆棧,沒有其他臨時變量。是否可以僅使用兩個堆棧來“構造”隊列數據結構?
3 回答

揚帆大魚
TA貢獻1799條經驗 獲得超9個贊
保留2疊,我們稱它們為inbox和outbox。
入隊:
將新元素推到 inbox
出隊:
如果outbox為空,則通過從中彈出每個元素inbox并將其推入來重新填充它outbox
彈出并從返回頂部元素 outbox
使用此方法,每個元素將在每個堆棧中恰好出現一次-意味著每個元素將被推入兩次并彈出兩次,從而提供了攤銷的固定時間操作。
這是Java的實現:
public class Queue<E>
{
private Stack<E> inbox = new Stack<E>();
private Stack<E> outbox = new Stack<E>();
public void queue(E item) {
inbox.push(item);
}
public E dequeue() {
if (outbox.isEmpty()) {
while (!inbox.isEmpty()) {
outbox.push(inbox.pop());
}
}
return outbox.pop();
}
}
添加回答
舉報
0/150
提交
取消