#include<iostream>
using namespace std;
template<class T> class Stack
{
public:
Stack();
int isEmpty();
void push(const T& node);
T pop();
private:
T * top;
T * base;
};
template <class T> Stack<T>::Stack()
{
base=(T *)malloc(100*sizeof(T));
top=base;
}
template <class T> int Stack<T>::isEmpty()
{
if(top==base)
return 1;
else
return 0;
}
template <class T> void Stack<T>::push(const T& node)
{
*top++=node;
}
template <class T> T Stack<T>::pop()
{
T e=*--top;
return e;
}
template<class T> class CQueue
{
public:
CQueue(){}
~CQueue(){}
void appendTail(const T& node);
T deleteHead();
private:
Stack<T> m_stack1;
Stack<T> m_stack2;
};
template <class T> void CQueue<T>::appendTail(const T& node)
{
m_stack1.push(node);
}
template <class T> T CQueue<T>::deleteHead()
{
if(!m_stack2.isEmpty())
{
return m_stack2.pop();
}
if(m_stack1.isEmpty())
cout<<"delete from empty queue"<<endl;
while(!m_stack1.isEmpty())
{
m_stack2.push(m_stack1.pop());
}
return m_stack2.pop();
}
int main()
{
CQueue<int> q;
q.appendTail(1);
q.appendTail(2);
q.appendTail(3);
q.appendTail(4);
q.appendTail(5);
q.deleteHead();
return 0;
}
using namespace std;
template<class T> class Stack
{
public:
Stack();
int isEmpty();
void push(const T& node);
T pop();
private:
T * top;
T * base;
};
template <class T> Stack<T>::Stack()
{
base=(T *)malloc(100*sizeof(T));
top=base;
}
template <class T> int Stack<T>::isEmpty()
{
if(top==base)
return 1;
else
return 0;
}
template <class T> void Stack<T>::push(const T& node)
{
*top++=node;
}
template <class T> T Stack<T>::pop()
{
T e=*--top;
return e;
}
template<class T> class CQueue
{
public:
CQueue(){}
~CQueue(){}
void appendTail(const T& node);
T deleteHead();
private:
Stack<T> m_stack1;
Stack<T> m_stack2;
};
template <class T> void CQueue<T>::appendTail(const T& node)
{
m_stack1.push(node);
}
template <class T> T CQueue<T>::deleteHead()
{
if(!m_stack2.isEmpty())
{
return m_stack2.pop();
}
if(m_stack1.isEmpty())
cout<<"delete from empty queue"<<endl;
while(!m_stack1.isEmpty())
{
m_stack2.push(m_stack1.pop());
}
return m_stack2.pop();
}
int main()
{
CQueue<int> q;
q.appendTail(1);
q.appendTail(2);
q.appendTail(3);
q.appendTail(4);
q.appendTail(5);
q.deleteHead();
return 0;
}