您的位置:首页 > 其它

用两个栈实现队列

2015-09-29 20:30 197 查看
两个栈,一个称之为主栈,另外一个次栈。

在主栈直接进行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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息