#include <iostream>
using namespace std;
struct Infor
{
char word;
};
template<class T>
class Test
{
public:
Test();
~Test();
void InterFace();
void GetIntoStack(); //入站
void OutputStack(); //出站不删除
void ShowStack(); //显示元素
void Exit(); //退出
void IsEmpty(); //是否为空
void DeleteTop(); //删除栈顶元素
void CleanArray(); //清零
private:
struct Infor *m_pInfHead, *m_pInfTail;
int m_nSumStack;
};
template<class T>
Test<T>::Test()
{
m_pInfTail = m_pInfHead = new struct Infor[10];
m_nSumStack = 0;
}
template<class T>
Test<T>::~Test()
{
}
template<class T>
void Test<T>::Exit()
{
exit(1);
}
template<class T>
void Test<T>::GetIntoStack()
{
static int sNTemp = 0;
if (sNTemp > 10)
{
cout << "None" << endl;
goto Exit;
}
char szTemp;
cin >> szTemp;
m_pInfTail[m_nSumStack++].word = szTemp;
sNTemp++;
Exit:
InterFace();
}
template<class T>
void Test<T>::OutputStack()
{
if (0 != m_nSumStack)
{
cout << m_pInfTail[m_nSumStack-1].word << endl;
}
else
{
cout << "None" << endl;
}
InterFace();
}
template<class T>
void Test<T>::ShowStack()
{
int i;
if (0 == m_nSumStack)
{
cout <<"None" << endl;
goto Exit;
}
for ( i = 0; i < m_nSumStack; i++)
{
cout << m_pInfHead[i].word << endl;
}
Exit:
InterFace();
}
template<class T>
void Test<T>::IsEmpty()
{
if (0 >= m_nSumStack)
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
InterFace();
}
template<class T>
void Test<T>::DeleteTop()
{
if (m_nSumStack <= 0)
{
cout << "None" << endl;
}
else
{
cout << m_pInfTail[--m_nSumStack].word << endl;
}
InterFace();
}
template<class T>
void Test<T>::CleanArray()
{
m_nSumStack = 0;
m_pInfTail = m_pInfHead;
InterFace();
}
template<class T>
void Test<T>::InterFace()
{
/* cout << "choose service" << endl;
cout << "Exit---------E" << endl;
cout << "GetIntoStack--p" << endl;
cout << "ShowStack----S" << endl;
cout << "outoutstack--G" << endl;
cout << "is empty----Y" << endl;
cout << "deleteTop---D" << endl;
cout << "cleanArray---T" << endl;*/
char szTemp;
cin >> szTemp;
switch (szTemp)
{
case 'E' | 'e':
Exit();
break;
case 'S' | 's':
ShowStack();
break;
case 'P'|'p':
GetIntoStack();
break;
case 'G'|'g':
OutputStack();
break;
case 'Y'|'y':
IsEmpty(); //是否为空
break;
case'D'|'d':
DeleteTop(); //删除栈顶元素
break;
case'T'|'t':
CleanArray(); //清零
break;
default:
break;
}
}
int main()
{
Test<char> t1;
t1.InterFace();
return 0;
}