其他分享
首页 > 其他分享> > leetcode225. 用队列实现栈

leetcode225. 用队列实现栈

作者:互联网

一:题目

在这里插入图片描述

二:上码

// class MyStack {
// private:
    
//      queue<int> q;

// public:
//     /** Initialize your data structure here. */
//     MyStack() {

//     }
    
//     /** Push element x onto stack. */
//     void push(int x) {
//         //后进 先出  反转队列 将新元素插到 第一个
//         int size = q.size();//还没插入新元素之前
//         q.push(x);
//         while(size--)//保证插入的第一个元素在队列的首位
//         {
//             int temp = q.front();
//             q.pop();
//             q.push(temp);//插入到队尾
//         } 
//     }
    
//     /** Removes the element on top of the stack and returns that element. */
//     int pop() {
//           int popele = q.front();//访问栈顶元素  
//           q.pop();//删除栈顶元素
//           return popele;
//     }
    
//     /** Get the top element. */
//     int top() {
//        return q.front();
//     }
    
//     /** Returns whether the stack is empty. */
//     bool empty() {
//         return q.empty();
//     }
// };

// /**
//  * Your MyStack object will be instantiated and called as such:
//  * MyStack* obj = new MyStack();
//  * obj->push(x);
//  * int param_2 = obj->pop();
//  * int param_3 = obj->top();
//  * bool param_4 = obj->empty();
//  */









class MyStack {
private:
    
   /**
    思路:这里我们不能用两个都队列(一个进,一个出)来模拟栈,
        queue1: 1 2 3 4 
        queue2: 4 3 2 1

        移除4 (即栈顶)

        此时
        queue1: 
        queue2: 3 2 1

        如果再来俩元素的话
        queue1: 5 6
        queue2:3 2 1
        想要移除栈顶6的话(再将队列一的元素移到队列二)
        queue2:3 2 1 6 5(可以看出无法得到 栈顶元素 6)
   **/

   queue<int> q;

public:
    /** Initialize your data structure here. */
    MyStack() {

    }
    
    //我们将每次入队的时候 将元素放到末尾,然后将其他元素按顺序出队排到其后面
    /** Push element x onto stack. */
    void push(int x) {
        int size = q.size();
        q.push(x);

        while(size--) {
            int temp = q.front();
            q.pop();
            q.push(temp);
        }
    }
    
    /** Removes the element on top of the stack and returns that element. */
    int pop() {
        int nums = q.front();
        q.pop();
        return nums;
    }
    
    /** Get the top element. */
    int top() {
      int nums = q.front();
      return nums;
    }
    
    /** Returns whether the stack is empty. */
    bool empty() {
        return q.empty();
    }
};

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack* obj = new MyStack();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->top();
 * bool param_4 = obj->empty();
 */

在这里插入图片描述

标签:leetcode225,obj,队列,top,pop,int,MyStack,实现,empty
来源: https://blog.csdn.net/qq_48508278/article/details/122440178