每日一题-232. 用栈实现队列

题目

链接
tag :
使用两个栈去模拟队列
easy

题解

class MyQueue {
private:
    stack<int> QueueOrder;
    stack<int> StackOrder;

public:
    /** Initialize your data structure here. */

    MyQueue() {
        
    }
    
    /** Push element x to the back of queue. */
    void push(int x) {
      StackOrder.push(x);
    }
    
    /** Removes the element from in front of queue and returns that element. */
    int pop() {

        int top = 0;
        //队列栈非空,直接取出
        if(QueueOrder.empty()){
            while(!StackOrder.empty()){
                QueueOrder.push(StackOrder.top());
                StackOrder.pop();
            }
        }

        top=QueueOrder.top();
        QueueOrder.pop();
        return top;
    }
    
    /** Get the front element. */
    int peek() {
        int top = 0;
        //队列栈非空,直接取出
        if(QueueOrder.empty()){
            while(!StackOrder.empty()){
                QueueOrder.push(StackOrder.top());
                StackOrder.pop();
            }
        }

        return QueueOrder.top();
    }
    
    /** Returns whether the queue is empty. */
    bool empty() {
        if(QueueOrder.empty()&&StackOrder.empty())
            return true;
        else 
            return false;
    }
};

栈的顺序和队列是相反的,对栈顺序再逆序则可以得到队列顺序。
不过什么时候选择将数据从堆栈顺序的栈移动到队列顺序的栈是值得思考的。
效率比较高的想法:
输入数据统一放在堆栈顺序输入栈
输出数据从队列顺序输出栈取出
当队列顺序输出栈为空时,一次性将另一堆栈数据取出移进。

posted @ 2021-03-05 21:13  tlamm  阅读(44)  评论(0)    收藏  举报