链式栈

来源:互联网 发布:非农数据的解释 编辑:程序博客网 时间:2024/04/30 04:18

StackNode.h

template<typename Type>class LinkStack;template<typename Type>class StackNode{private:Type m_data;StackNode<Type> *m_pnext;private:friend class LinkStack<Type>;StackNode(Type dt,StackNode<Type> *next):m_data(dt),m_pnext(next){};};

LinkStack.h

#include "StackNode.h"template<typename Type> class LinkStack{private:StackNode<Type> *m_ptop;public:LinkStack():m_ptop(NULL){}~LinkStack(){MakeEmpty();}public:void MakeEmpty();void Push(const Type item);Type Pop();Type GetTop() const;void Print();bool IsEmpty() const{return m_ptop==NULL;}};

LinkStack.cpp

template<typename Type> void LinkStack<Type>::MakeEmpty(){StackNode<Type> *p;while(m_ptop != NULL){p = m_ptop;m_ptop = m_ptop->m_pnext;delete p;}}template<typename Type> void LinkStack<Type>::Push(const Type item){StackNode<Type> *p = new StackNode<Type>(item, m_ptop);m_ptop = p;}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> *p = m_ptop;m_ptop = m_ptop->m_pnext;Type temp = p->m_data;delete p;return temp;}template<typename Type> void LinkStack<Type>::Print(){StackNode<Type> *p = m_ptop;while(p != NULL){cout<<p->m_data<<' ';p = p->m_pnext;}cout<<endl;}

Test.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();stack.Pop();return 0;}

原创粉丝点击