1. 程式人生 > 其它 >leetcode232_用棧實現佇列

leetcode232_用棧實現佇列

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(); */
縱一葦之所如,臨萬頃之茫然。