C++解LeetCode225. 用队列实现栈(适合基础薄弱)
2023-06-13 09:13:09 时间
请你仅使用两个队列实现一个后入先出(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
主要是push的操作不同
1、这个队列不能直接push进元素,因为栈最后放进去的元素是栈顶,而队列最后放进去的元素是尾
2、所以先把要插入的元素放进一个临时队列
3、把主队列的元素放进临时队列
4、最后让临时队列元素依次放进主队列
class MyStack {
public:
queue<int> queue1;
queue<int> queue2; //为临时的队列
MyStack() {
}
void push(int x) {
queue2.push(x); //把要插入的元素放进临时队列
while(!queue1.empty()){
queue2.push(queue1.front()); //把第一个队列的头的值放到临时队列
queue1.pop(); //弹出队列一的元素,最后弹出是防止队列头的元素丢失
}
while(!queue2.empty()){ //把临时队列元素归还给队列1
queue1.push(queue2.front());
queue2.pop();
}
}
int pop() {
int x = queue1.front(); //存储栈顶元素的值
queue1.pop(); //完成出栈的操作
return x; // 返回前栈顶元素的值
}
int top() {
return queue1.front();
}
bool empty() {
return queue1.empty();
}
};
相关文章
- C++学习——c++逗号操作符说明(附加全部运算符优先级)
- c++ 优先级队列自定义比较函数_队列发送优先级
- EasyC++81,抽象基类
- 求最大公约数和最小公倍数 -- C++ 辗转相除法
- c++中按位取反_取反和按位取反
- C++解LeetCode232. 用栈实现队列(适合基础薄弱)
- Windows10中使用VS2022和Cmake编译构建C++开源日志库-spdlog
- 深入理解C++11_c++ string char
- Linus Torvalds:“C++ 真是一门很烂的语言!”
- C++从入门到精通(第九篇) :多态
- C++结构体和类的区别_c++有结构体吗
- c++-strcpy函数的实现
- c++的链表-C++实现简单链表
- 【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )
- 本地推理,单机运行,MacM1芯片系统基于大语言模型C++版本LLaMA部署“本地版”的ChatGPT
- C/C++:程序环境和预处理/宏
- 开心档之C++ 类 & 对象
- C++经典面试题(最全,面中率最高)详解编程语言
- C++优先级队列存储智能指针详解
- C如何连接Oracle数据库(c++怎样连oracle)
- 用C++实现队列的程序代码
- C++设置超时时间的简单实现方法