用队列实现栈
在C++ stl queue中是头部移除元素,结尾添加数据,通过临时队列转换,可以实现栈效果
代码如下:
/*
*@author: 赵秋然
*@date:2021年2月15日
*@description:队列实现栈
*/
#include<queue>
class MyStack
{
public:
MyStack()
{
}
/** Push element x onto stack. */
void push(int x)
{
std::queue<int> qtmp;
while (!q.empty())
{
qtmp.push(q.front());
q.pop();
}
q.push(x);
while (!qtmp.empty())
{
q.push(qtmp.front());
qtmp.pop();
}
}
/** Removes the element on top of the stack and returns that element. */
int pop()
{
int tmp = top();
q.pop();
return tmp;
}
/** Get the top element. */
int top()
{
return q.front();
}
/** Returns whether the stack is empty. */
bool empty()
{
return q.empty();
}
std::queue<int> q;
};
用栈实现队列
在C++ stl stack是单端开口的容器,实际上这个容器就是模拟的栈存储结构
思路也是同上
/*
*@author: 赵秋然
*@date:2021年2月15日
*@description:栈实现队列
*/
#include<stack>
class MyQueue
{
public:
MyQueue()
{
}
/** Push element x to the back of queue. */
void push(int x)
{
std::stack<int> stmp;
while (!s.empty())
{
stmp.push(s.top());
s.pop();
}
s.push(x);
while (!stmp.empty())
{
s.push(stmp.top());
stmp.pop();
}
}
/** Removes the element from in front of queue and returns that element. */
int pop()
{
int tmp = peek();
s.pop();
return tmp;
}
/** Get the front element. */
int peek()
{
return s.top();
}
/** Returns whether the queue is empty. */
bool empty()
{
return s.empty();
}
std::stack<int> s;
};