发布时间:2024-12-30 10:01
使用栈实现队列的下列操作:
1、push(x) – 将一个元素放入队列的尾部。
2、pop() – 从队列首部移除元素。
3、peek() – 返回队列首部的元素。
4、empty() – 返回队列是否为空。
示例:
MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek(); // 返回 1
queue.pop(); // 返回 1
queue.empty(); // 返回 false
说明:
1、你只能使用标准的栈操作 – 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
2、你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
3、假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。
思路:
使用双栈实现队列,prestack模拟队列,aftstack为辅助栈,用来暂时存储元素。
push():1、如果队列为空,则直接压入元素prestack。
2、如果队列非空,先把prestack元素压入aftstack,再
把元素压入prestack,最后把aftstack的元素再压回 prestack。
pop():由于prestack模拟队列,先进先出,因此返回栈顶元素即可(prestack.top())。
代码:
class MyQueue {
private:
stack<int> prestack;
stack<int> aftstack;
public:
/** Initialize your data structure here. */
MyQueue() {
}
/** Push element x to the back of queue. */
void push(int x) {
if(prestack.empty())
{
prestack.push(x);
}
else
{
while(!prestack.empty())
{
aftstack.push(prestack.top());
prestack.pop();
}
prestack.push(x);
while(!aftstack.empty())
{
prestack.push(aftstack.top());
aftstack.pop();
}
}
}
/** Removes the element from in front of queue and returns that element. */
int pop() {
if(prestack.empty())
{
return -1;
}
else
{
int temp = prestack.top();
prestack.pop();
return temp;
}
}
/** Get the front element. */
int peek() {
if(prestack.empty())
{
return -1;
}
else
{
return prestack.top();
}
}
/** Returns whether the queue is empty. */
bool empty() {
if(prestack.empty())
{
return true;
}
else
{
return false;
}
}
};
/**
* 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();
*/
解读:Informer——比Transformer更有效的长时间序列预测方法
ES2018 最新 理解Javascript中的执行上下文和执行栈
mysql语句审核_mysql yearning-sql审核平台
聊一聊深度学习--包括计算前馈网络的反向传播和卷积的反向传播
利用Python实现新冠疫情数据可视化(获取疫情历史数据,制作南丁格尔玫瑰图、疫情地图、动态疫情组合图、词云)
苹果云服务icloud_苹果手机备忘录不小心删了怎么恢复?分享专业教程
图解Transformer模型(Multi-Head Attention)