zoukankan      html  css  js  c++  java
  • 232. Implement Queue using Stacks

    问题:

    设计数据结构,使用stack实现queue。

    实现以下功能:

    • void push(int x) Pushes element x to the back of the queue.
    • int pop() Removes the element from the front of the queue and returns it.
    • int peek() Returns the element at the front of the queue.
    • boolean empty() Returns true if the queue is empty, false otherwise.
    Example 1:
    
    Input
    ["MyQueue", "push", "push", "peek", "pop", "empty"]
    [[], [1], [2], [], [], []]
    Output
    [null, null, null, 1, 1, false]
    
    Explanation
    MyQueue myQueue = new MyQueue();
    myQueue.push(1); // queue is: [1]
    myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
    myQueue.peek(); // return 1
    myQueue.pop(); // return 1, queue is [2]
    myQueue.empty(); // return false
     
    
    Constraints:
    
    1 <= x <= 9
    At most 100 calls will be made to push, pop, peek, and empty.
    All the calls to pop and peek are valid.
    

      

    解法:双栈->实现队列

    参考labuladong解析

    重点在:

    查队列头peek 和 出队pop

    实现方法:

    • 若s2中元素,那么优先出队
    • 若s2中元素,那么s1.pop排空->s2.push

    代码参考:

     1 class MyQueue {
     2 public:
     3     /** Initialize your data structure here. */
     4     MyQueue() {
     5         
     6     }
     7     
     8     /** Push element x to the back of queue. */
     9     void push(int x) {
    10         s1.push(x);
    11     }
    12     
    13     /** Removes the element from in front of queue and returns that element. */
    14     int pop() {
    15         int res = peek();
    16         s2.pop();
    17         return res;
    18     }
    19     
    20     /** Get the front element. */
    21     int peek() {
    22         if (s2.empty()) {
    23             while(!s1.empty()) {
    24                 s2.push(s1.top());
    25                 s1.pop();
    26             }
    27         }
    28         return s2.top();
    29     }
    30     
    31     /** Returns whether the queue is empty. */
    32     bool empty() {
    33         return s2.empty() && s1.empty();
    34     }
    35 private:
    36     stack<int> s1, s2;
    37 };
    38 
    39 /**
    40  * Your MyQueue object will be instantiated and called as such:
    41  * MyQueue* obj = new MyQueue();
    42  * obj->push(x);
    43  * int param_2 = obj->pop();
    44  * int param_3 = obj->peek();
    45  * bool param_4 = obj->empty();
    46  */
  • 相关阅读:
    Javascript一天学完系列(四)函数上下文bind &call
    Javascript一天学完系列(三)JavaScript面向对象
    Javascript一天学完系列(二)Callbacks回调函数
    Python(切片)
    水果篮子(母函数)
    判断链表是否有环
    链表部分逆置
    Python(List和Tuple类型)
    HDU1426(DFS)
    HDU4474(数位BFS)
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/14673435.html
Copyright © 2011-2022 走看看