面試題9:用兩個棧實現隊列

題目描述

用兩個棧來實現一個隊列,完成隊列的Push和Pop操做。 隊列中的元素爲int類型。

使用棧實現隊列的下列操做:push(x) -- 將一個元素放入隊列的尾部pop() -- 從隊列首部移除元素peek() -- 返回隊列首部的元素empty() -- 返回隊列是否爲空。編程

你只能使用標準的棧操做 -- 也就是隻有 push to top, peek/pop from top, size, 和 is empty 操做是合法的。spa

編程思想

因爲隊列是先進先出的,而棧是先進後出的,因此要用2個棧來實現隊列的入隊出隊功能。隊列的入隊,與棧的同樣。隊列的出隊,先將第一個棧中的元素所有彈出,並倒入到第二個棧中,將第二個棧中棧頂元素彈出,並將stack2中剩下的元素倒回到stack1中,即實現一次出隊。code

編程實現

class MyQueue {
public:
    /** Initialize your data structure here. */
    
    stack<int> s1, s2;
    
    MyQueue() {
        
    }
    
    /** Push element x to the back of queue. */
    void push(int x) {
        while(!s2.empty()) {
            s1.push(s2.top());
            s2.pop();
        }
        s2.push(x);
        while(!s1.empty()) {
            s2.push(s1.top());
            s1.pop();
        }
    }
    
    /** Removes the element from in front of queue and returns that element. */
    int pop() {
        int a = s2.top();
        s2.pop();
        return a;
    }
    
    /** Get the front element. */
    int peek() {
        return s2.top();
    }
    
    /** Returns whether the queue is empty. */
    bool empty() {
        return s2.empty();
    }
};

題目總結

掌握隊列和棧的特性。blog

相關文章
相關標籤/搜索