首先分析一下队列和栈的特点
队列:先进先出,后进后出。
栈:先进后出、后进先出。
知道特性后,我们边思考边写。
#include<iostream>
//先声明一个栈类
class Stack{
public:
void push(int data);
int pop();
int top();
bool empty();
private:
queue<int> m_data;
}
void Stack::push(int data) //思路:后插入的元素要先出,那么就可以把队列中现有的元素都取出来依次放到data之后
{
int queueSize = m_data.size();
m_data.push(data); //注意,虽然都是容器,但是追加元素的方式不同,vector是push_back
while(queueSize)
{
m_data.push(m_data.front());
m_data.pop(); //不要忘记拿到值之后,要在队列头清除该值
queueSize--;
}
}
int Stack::pop()
{
const int popMem = m_data.front();
m_data.pop();
return popMem;
}
int Stack::top() //top操作就是要拿到栈顶的元素,即队列刚插入的(已经被移到队列最前)元素
{
return m_data.front();
}
bool Stack::empty()
{
return m_data.empty();
}
当然,还有其他方法,这种方法是我个人比较喜欢的方法。