leetcode232_用棧實現佇列
阿新 • • 發佈:2021-12-11
1、題目
2、分析
C++存在這樣幾種容器,vector,list, deque
vector的優點是線性空間,隨機存取的效率高,但是插入刪除的效率不高。
list使用雙向連結串列實現,空間不連續,但是插入刪除的效率高,隨機存取的效率不高。
deque綜合了兩者的優點,使用線性空間,隨機存取的效率高,可以實現頭尾節點的插入刪除,但是實現結構複雜。
stack和queue屬於容器介面卡,都是使用上面的容器來實現底層邏輯,棧一般預設的是使用deque來實現底層邏輯,當然我們也可以自己修改。
今天要實現的功能就是如何用stack實現quene。而且只使用push(),pop(),top(), empty()等幾個函式。
具體分析參考連結:https://leetcode-cn.com/problems/implement-queue-using-stacks/solution/tu-jie-guan-fang-tui-jian-ti-jie-yong-zh-4hru/
具體需要注意的是,在stack的操作裡面,pop操作直接刪除,是不會反悔元素的。
3、程式碼
class MyQueue { public: stack<int> stack_in; stack<int> stack_out; MyQueue() { } void push(int縱一葦之所如,臨萬頃之茫然。x) { stack_in.push(x); } int pop() { //stack out為空的時候 if(stack_out.empty()){ while(!stack_in.empty()){ int pre = stack_in.top(); stack_in.pop(); stack_out.push(pre); } } int pre = stack_out.top(); stack_out.pop();return pre; } int peek() { int outcome = this->pop(); stack_out.push(outcome); return outcome; } bool empty() { return (stack_in.empty() && stack_out.empty()); } }; /** * Your MyQueue object will be instantiated and called as such: * MyQueue* obj = new MyQueue(); * obj->push(x); * int param_2 = obj->pop(); * int param_3 = obj->peek(); * bool param_4 = obj->empty(); */