• LeetCode 225 用队列实现栈


    题目: 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

    实现 MyStack 类:

    • void push(int x) 将元素 x 压入栈顶。
    • int pop() 移除并返回栈顶元素。
    • int top() 返回栈顶元素。
    • boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

    注意:

    你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
    你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

    示例:

    输入:
    [“MyStack”, “push”, “push”, “top”, “pop”, “empty”]
    [[], [1], [2], [], [], []]
    输出:
    [null, null, null, 2, 2, false]
    解释:
    MyStack myStack = new MyStack();
    myStack.push(1);
    myStack.push(2);
    myStack.top(); // 返回 2
    myStack.pop(); // 返回 2
    myStack.empty(); // 返回 False

    思路:

    一个队列实现栈,先计算队列中元素的个数,再减一,将所有前边的元素依次添加到队列的后边去,这样最后一个进来的栈顶了

    class Solution {
    public:
    	queue<int> que;
    	void push(int x) {
    		que.push(x);
    	}
    	int pop() {
    		int size = que.size();
    		size--;
    		while (size--) {
    			que.push(que.front());
    			que.pop();
    		}
    		int result = que.front();
    		que.pop();
    		return result;
    	}
    	int top() {
    		return que.back();
    	}
    	bool empty() {
    		return que.empty();
    	}
    };
    
    int main() {
    	Solution ss;
    	ss.push(1);
    	ss.push(2);
    	cout << ss.top() << endl;
    	ss.push(3);
    	ss.pop();
    	cout << ss.top() << endl;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  • 相关阅读:
    力扣 1331. 数组序号转换
    Nginx rewrite规则实现http跳转到https及301永久重定向
    【Android】VirtualDisplay创建流程及原理
    Java-API-ES
    嵌入式分享合集24
    Docker笔记
    AutoSAR入门:应用背景及简介
    数据库基础+增删查改初阶
    OpenCV基本操(IO操作,读取、显示、保存)
    unittest框架
  • 原文地址:https://blog.csdn.net/qq_44902386/article/details/130908046