《CTCI》 P142
3 栈与队列
题目
3.5 实现一个MyQueue类,该类用两个栈来实现一个队列。
解答
#include <stack>
template <typename T> class queue
{
public:
void push(const T& val);
void pop();
const T& front();
const T& back();
size_t size() const;
bool empty() const;
private:
std::stack<T> s1;
std::stack<T> s2;
};
template <typename T> void queue<T>::push(const T& val)
{
s1.push(val);
}
template <typename T> void queue<T>::pop()
{
if (empty())
return;
if (s2.empty())
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
s2.pop();
}
template <typename T> const T& queue<T>::front()
{
if (s2.empty())
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
return s2.top();
}
template <typename T> const T& queue<T>::back()
{
if (s1.empty())
{
while (!s2.empty())
{
s1.push(s2.top());
s2.pop();
}
}
return s1.top()
}
template <typename T> size_t queue<T>::size() const
{
return s1.size() + s2.size();
}
template <typename T> bool queue<T>::empty() const
{
return size() == 0;
}