題解 | #用兩個棧實現(xiàn)隊列#
用兩個棧實現(xiàn)隊列
http://www.fangfengwang8.cn/practice/54275ddae22f475981afa2244dd448c6
用兩個棧模擬隊列
題解:模擬
原理:兩次棧入棧相當于兩次逆序可以恢復至原數(shù)組次序;
思路:
1.push操作將值放入棧A 。
2.pop操作前,先將棧A中除了棧底值的值push到棧B。
3.之后的pop操作直接在棧B上操作,直到棧B為空。在重復2操作。
圖示:
復雜度分析:
時間復雜度:,push操作為O(1),pop操作為O(1)
空間復雜度:,需要2個stack來存一個序列,一共占用O(n)
實現(xiàn)如下:
class Solution { public: void push(int node) { stack1.push(node);//入棧 } int pop() { int ans; if(!stack2.empty()) {ans = stack2.top(); stack2.pop();}//當棧B有值時,返回棧B的頂部 else {//當棧B為空,先將棧A拷貝至棧B,只留一個值 while(!(stack1.size()==1)){stack2.push(stack1.top()); stack1.pop();} ans = stack1.top(); stack1.pop(); //將棧A唯一的一個值返回; } return ans; } private: stack<int> stack1;//棧A stack<int> stack2;//棧B };
??途W(wǎng)編程題題解 文章被收錄于專欄
本專欄記錄在??途W(wǎng)上AC的每一題,寫下題解。 未來2年完成2000編程題的題解。 2021.12.29更新,最進準備畢設,斷更了,會盡快做完畢設,繼續(xù)做這一件事情