今天,我们一起用C++写链栈,具体如下。
LinkStack.h具体内容:
#include "StackNode.h" template<typename Type> class LinkStack{ public: LinkStack() :m_ptop(NULL){} ~LinkStack(){ MakeEmpty(); } public: void MakeEmpty(); //make the stack empty void Push(const Type item); //push the data Type Pop(); //pop the data Type GetTop() const; //get the data void Print(); //print the stack bool IsEmpty() const{ return m_ptop == NULL; } private: StackNode<Type> *m_ptop; }; template<typename Type> void LinkStack<Type>::MakeEmpty(){ StackNode<Type> *pmove; while (m_ptop != NULL){ pmove = m_ptop; m_ptop = m_ptop->m_pnext; delete pmove; } } template<typename Type> void LinkStack<Type>::Push(const Type item){ m_ptop = new StackNode<Type>(item, m_ptop); } template<typename Type> Type LinkStack<Type>::GetTop() const { if (IsEmpty()){ cout << "There is no elements!" << endl; exit(1); } return m_ptop->m_data; } template<typename Type> Type LinkStack<Type>::Pop() { if (IsEmpty()){ cout << "There is no elements!" << endl; exit(1); } StackNode<Type> *pdel = m_ptop; m_ptop = m_ptop->m_pnext; Type temp = pdel->m_data; delete pdel; return temp; } template<typename Type> void LinkStack<Type>::Print(){ StackNode<Type> *pmove = m_ptop; cout << "buttom"; while (pmove != NULL){ cout << "--->" << pmove->m_data; pmove = pmove->m_pnext; } cout << "--->top" << endl << endl << endl; }StackNode.h具体内容:
template<typename Type> class LinkStack; template<typename Type> class StackNode{ private: friend class LinkStack < Type > ; StackNode(Type dt, StackNode<Type> *next = NULL) :m_data(dt), m_pnext(next){} private: Type m_data; StackNode<Type> *m_pnext; };main.cpp具体内容:
#include <iostream> using namespace std; #include "LinkStack.h" int main(){ LinkStack<int> stack; int init[10] = { 1, 3, 5, 7, 4, 2, 8, 0, 6, 9 }; for (int i = 0; i < 10; i++){ stack.Push(init[i]); } stack.Print(); cout << stack.Pop() << endl; stack.Print(); cout << stack.GetTop() << endl; stack.Print(); cout << stack.Pop() << endl; stack.Print(); stack.MakeEmpty(); stack.Print(); cin.get(); return 0; }运行效果如图1所示:
图1 运行效果