栈的顺序存储结构与操作

来源:互联网 发布:c语言编程序 编辑:程序博客网 时间:2024/04/25 06:46

 #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;
}