之前已经了解过了栈和队列的特性,再温习一下
栈:先进后出,后进先出。
队列:先进先出,后进后出。
好,直接边思考边写代码
#include<iostream>
#include<stack>
//先构建一个队列的类
class MyQueue
{
public:
void push(int data) //push要解决的问题就是:将栈操作中 后push进去的元素最后再弹出来。
{
//首先,我们要借助一个辅助栈,存放m_data中已经存在的数据
stack<int> temp;
while(!m_data.empty()) //将已经在栈中存好的符合先进先出的数据倒出来。
{
temp.push(m_data.top()); //不断地取栈顶元素
m_data.pop(); //取了之后且勿忘直接弹栈。
}
m_data.push(data); //将data压栈。
while(!temp.empty()) //data压完之后将辅助栈的元素一个个压入m_data。
{
m_data.push(temp.top());
temp.pop();
}
}
int pop() //维护好的m_data已经符合先进先出了,直接弹栈就可以了。
{
const int popMem = m_data.top();
m_data.pop();
return popMem;
}
int front() //队列顶就是已经维护好的m_data的栈顶。
{
return m_data.top();
}
bool empty()
{
return m_data.empty();
}
private:
stack<int> m_data; //存放数据
}
当然,还有其他方法,不过这种方法我用着感觉还蛮简单易用的。