劍指Offer 面試題09 用兩個棧實現佇列

2021-10-23 01:22:12 字數 679 閱讀 9220

示例 1:

輸入:

[,[3],,]

輸出:[null,null,3,-1]

示例 2:

輸入:

[,,[5],[2],,]

輸出:[null,-1,null,null,5,2]

解題思路:

棧無法實現佇列功能: 棧底元素(對應隊首元素)無法直接刪除,需要將上方所有元素出棧。

雙棧可實現列表倒序: 設有含三個元素的棧 a = [1,2,3] 和空棧 b = 。若迴圈執行 a 元素出棧並新增入棧 b ,直到棧 a為空,則 a = ,b=[3,2,1] ,即 棧 b 元素實現棧 a 元素倒序 。

利用棧 b 刪除隊首元素: 倒序後,b 執行出棧則相當於刪除了 a 的棧底元素,即對應隊首元素。

複雜度分析:

由於問題特殊,以下分析僅滿足新增 n 個元素並刪除 n 個元素,即棧初始和結束狀態下都為空的情況。

class cqueue 

st1.push(value);

}int deletehead()

if (st2.empty())

}res = st2.top();

st2.pop();

return res;

}};

《劍指offer》面試題七 用兩個棧實現佇列

原題位址 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。這裡用兩個陣列來模擬兩個棧。由於棧的特點是先進後出,佇列的特點是先進先出,所以這裡要用兩個棧來實現,乙個棧先進後出,兩個棧的話就可以先進先出了。其中乙個棧 稱呼a棧吧 專門用來完成push操作。只要...

劍指Offer 面試題七 用兩個棧實現佇列

templateclass cqueue cqueue void t deletehead void print private stackstack1 stackstack2 stack1只相當於乙個轉換器,新增元素時經過stack1將元素統統存入stack2中,也就是說stack2中存入元素,s...

劍指Offer 面試題9用兩個棧實現佇列

思路 stack1存放著逆序的剩餘佇列,stack2存放著正序的佇列。pop的時候,當stack2為空,表示序列都在stack1中,則從stack1中迴圈pop後push到stack2,再從stack2中pop出隊首 stack2不為空則直接pop。push的時候,當stack2不為空,把資料從st...