标签:
用两个栈实现一个队列的功能。
假设两个栈A和B,且都为空。
栈A提供push()
功能,栈B提供pop()
功能。
#include <iostream>
#include <stack>
using namespace std;
template<class T>
class MyQueue
{
public:
void push(const T& t)
{
s1.push(t);
}
void pop()
{
if (s2.empty())
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
s2.pop();
}
T& top()
{
if (s2.empty())
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
return s2.top();
}
bool empty() const
{
return s1.empty() && s2.empty();
}
private:
stack<T> s1;
stack<T> s2;
};
int main()
{
MyQueue<int> myque;
for (int i = 0; i < 10; i++)
{
myque.push(i);
}
while (!myque.empty())
{
cout<<myque.top()<<" ";
myque.pop();
}
}
注意:pop()
和top()
中没有再加上if (!s2.empty())
的判断,我认为此处应该由使用者来判断MyQueue
对象是否为空,减少一些不必要的判断可以提高程序效率。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/foreverling/article/details/46973171