template <typename T>
class MyQueue
{
public:
stack<T> s1;
stack<T> s2;
public:
void push(T data);
void pop();
T front();
T back();
int size();
bool empty();
};
template <typename T>
void MyQueue<T>::push(T data)
{
s1.push(data);
}
template <typename T>
void MyQueue<T>::pop()
{
if (!s2.empty())
{
s2.pop();
}
else if (!s1.empty())
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
s2.pop();
}
else
{
cout << "MyQueue is empty,can not pop" << endl;
}
}
template <typename T>
T MyQueue<T>::front()
{
if (!s2.empty())
{
return s2.top();
}
else if (!s1.empty())
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
return s2.top();
}
else
{
cout << "MyQueue is empty,can not get front" << endl;
}
}
template <typename T>
T MyQueue<T>::back()
{
if (!s1.empty())
{
return s1.top();
}
else if (!s2.empty())
{
while (!s2.empty())
{
s1.push(s2.top());
s2.pop();
}
return s1.top();
}
else
{
cout << "MyQueue is empty,can not get back" << endl;
}
}
template <typename T>
int MyQueue<T>::size()
{
cout << "size():" << s1.size() + s2.size() << endl;
return s1.size() + s2.size();
}
template <typename T>
bool MyQueue<T>::empty()
{
cout << "empty():" << s1.empty() && s2.empty() << endl;
return s1.empty() && s2.empty();
}