您的位置:首页 > 职场人生

~使用两个栈实现一个队列~

2017-04-16 19:24 281 查看
栈和队列最常考的面试题之一:  使用两个栈实现一个队列

主要思路:

1)建立两个栈input与output,其中input用于入队列,output用于出队列;

2)当元素要入队列时,直接当元素压入input中;

3)当元素要出队列时,先判断output中是否有元素。若是有,可以直接将output中的栈顶元素出队列;若是没有,则先将input中的元素入到output中,再将output的栈顶元素出队列;

4)判断队列是否为空,依次判断input与output是否为空,若有其中一个栈不为空,则队列就不为空。

 

 废话少说,直接上代码啦!!

#include <stack>

template <class T>
class DoubleStackToQueue
{
public:
void Push(const T& data)
{
input.push(data);
}

void Pop()
{
if(!output.empty())
{
output.pop();
}
else
{
if(!input.empty())
{
while(input.size() - 1)
{
output.push(input.top());
input.pop();
}

input.pop();
}
}
}

bool Empty()
{
if(!(input.empty() && output.empty()))
{
return false;
}

return true;
}

T& Front()
{
if(!output.empty())
{
return output.top();
}

if(!input.empty())
{
while(!input.empty())
{
output.push(input.top());
input.pop();
}

return output.top();
}
}

T& Back()
{
if(!input.empty())
{
return input.top();
}

if(!output.empty())
{
while(!input.empty())
{
input.push(output.top());
output.pop();
}

return input.top();
}
}

void Print()
{
if(!Empty())
{
cout<<Front()<<" ";
Pop();
}
}
protected:
stack<T> input, output;
};


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题 队列