#include <iostream>
using namespace std;
struct Infor
{
char temp;
struct Infor *next;
};
template<class T>
class Test
{
public:
Test();
~Test();
void InterFace();
void Exit();
void GetIntoStack();
void GetOutStack();
void IsStackEmpty();
void DeleteTopStack();
void MemsetStack();
private:
int m_nNumber;
struct Infor *m_pBase, *m_pTop;
};
template<class T>
Test<T>::Test()
{
m_nNumber = 0;
m_pBase = new struct Infor;
m_pTop = m_pBase;
m_pBase->next = NULL;
}
template<class T>
Test<T>::~Test()
{
}
template<class T>
void Test<T>::Exit()
{
exit(1);
}
template<class T>
void Test<T>::GetIntoStack() //入栈
{
T temp;
cin >> temp;
struct Infor *p = NULL;
p = new struct Infor;
p->temp = temp;
p->next = m_pTop;
m_pTop = p;
m_nNumber++;
InterFace();
}
template<class T>
void Test<T>::GetOutStack() //取栈顶元素
{
if ( m_pTop == m_pBase)
{
cout << "None" << endl;
}
else
{
cout << m_pTop->temp << endl;
}
InterFace();
}
template<class T>
void Test<T>::IsStackEmpty() //是否空栈
{
if (m_pBase == m_pTop)
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
InterFace();
}
template<class T>
void Test<T>::DeleteTopStack() //删除栈元素
{
if (m_pTop == m_pBase)
{
cout << "None" << endl;
}
else
{
struct Infor *p = NULL;
cout << m_pTop->temp << endl;
p = m_pTop;
m_pTop = m_pTop->next;
delete p;
}
InterFace();
}
template<class T>
void Test<T>::MemsetStack() //清空栈
{
m_pBase = m_pTop;
InterFace();
}
template<class T>
void Test<T>::InterFace()
{
char szTemp;
cin >> szTemp;
switch (szTemp)
{
case 'E'|'e':
Exit();
break;
case 'P'|'p':
GetIntoStack();
break;
case 'G'|'g':
GetOutStack();
break;
case 'Y'|'y':
IsStackEmpty();
break;
case 'D'|'d':
DeleteTopStack();
break;
case 'T'|'t':
MemsetStack();
break;
}
}
int main()
{
Test<char> t1;
t1.InterFace();
return 0;
}