两个栈,一个称之为主栈,另外一个次栈。
在主栈直接进行Push操作。
次栈辅助进行Pop和Front操作。
栈直接使用STL中的Stack。
源代码:
NewQueue.h
#include <stack>
class NewQueue
{
public:
void Push(int data);
void Pop();
int Front();
int Back();
bool Empty();
private:
std::stack<int> m_stack1; // 主栈
std::stack<int> m_stack2; // 从栈
}
NewQueue.cpp
#include "NewQueue.h"
void NewQueue::Push(int data)
{
m_stack1.push(data);
}
void NewQueue::Pop()
{
// 将主栈中数据全部放入次栈
while (!m_stack1.empty())
{
m_stack2.push(m_stack1.top());
m_stack1.pop();
}
m_stack2.pop();
// 将数据从次栈中还原到到主栈
while (!m_stack2.empty())
{
m_stack1.push(m_stack1.top());
m_stack2.pop();
}
}
int NewQueue::Front()
{
// 将主栈中数据全部放入次栈
while (!m_stack1.empty())
{
m_stack2.push(m_stack1.top());
m_stack1.pop();
}
int data = m_stack2.top();
// 将数据从次栈中还原到到主栈
while (!m_stack2.empty())
{
m_stack1.push(m_stack2.top());
m_stack2.pop();
}
return data;
}
int NewQueue::Back()
{
return m_stack1.top();
}
bool NewQueue::Empty()
{
return m_stack1.empty();
}