LeetCode232 用栈实现队列
2024-08-24 20:59:34
使用栈实现队列的下列操作:
- push(x) -- 将一个元素放入队列的尾部。
- pop() -- 从队列首部移除元素。
- peek() -- 返回队列首部的元素。
- empty() -- 返回队列是否为空。
示例:
MyQueue queue = new MyQueue(); queue.push(1);
queue.push(2);
queue.peek(); // 返回 1
queue.pop(); // 返回 1
queue.empty(); // 返回 false
说明:
- 你只能使用标准的栈操作 -- 也就是只有
push to top
,peek/pop from top
,size
, 和is empty
操作是合法的。 - 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
- 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。
/*
算法思想:
由于队列是先进先出的,而栈是先进后出的,所以要用2个栈来实现队列的入队出队功能,队列的入队功能与栈的一样,出队时,先将第一个栈中的元素全部弹出,并倒入到第二个栈中,将第二个栈中栈顶元素弹出,并将stack2中剩下的元素倒回到stack1中,即实现一次出队。
*/
//算法实现:
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();
}
}; /**
* Your MyQueue object will be instantiated and called as such:
* MyQueue obj = new MyQueue();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.peek();
* bool param_4 = obj.empty();
*/
最新文章
- visio二次开发——图纸解析之形状
- [Leetcode] Course Schedule
- SharePoint Online 创建门户网站系列之准备篇
- C# 发邮件
- IOS Delegate &; protocal
- spring quartz 定时任务“Failed to load class ";org.slf4j.impl.StaticLoggerBinder”“Checking for available updated version of Quartz”
- uinty3d使用ugui封装一个分页控件
- LPC1788的内部EEPROM使用
- intelliJ IDEA创建web工程
- centos7搭建SVN+Apache+IF.svnadmin实现web管理SVN
- Head First 设计模式 第3章 装饰者模式
- Shell Script编程——USB挂载/复制文件/查找文件/压缩文件
- 《Java从入门到放弃》JavaSE入门篇:面向对象语法一(入门版)
- 软件工程(GZSD2015)学生博客列表
- Bzoj4869: [Shoi2017]相逢是问候
- Egret的容器--删除对象,遮罩
- OC闪屏页尺寸
- Flex外包公司——案例汇总
- 锁、C#中Monitor和Lock以及区别
- 基于 OpenSSL 的 CA 建立及证书签发