#
template class LinkStack;
template class StackNode{
private:
friend class LinkStack;
StackNode(Type dt,StackNode *next=NULL):m_data(dt),m_pnext(next){}
private:
Type m_data;
StackNode *m_pnext;
};
#
#include "StackNode.h"
template 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 *m_ptop;
};
template void LinkStack::MakeEmpty(){
StackNode *pmove;
while(m_ptop!=NULL){
pmove=m_ptop;
m_ptop=m_ptop->m_pnext;
delete pmove;
}
}
template void LinkStack::Push(const Type item){
m_ptop=new StackNode(item,m_ptop);
}
template Type LinkStack::GetTop() const{
if(IsEmpty()){
cout<
exit(1);
}
return m_ptop->m_data;
}
template Type LinkStack::Pop(){
if(IsEmpty()){
cout<
exit(1);
}
StackNode *pdel=m_ptop;
m_ptop=m_ptop->m_pnext;
Type temp=pdel->m_data;
delete pdel;
return temp;
}
template void LinkStack::Print(){
StackNode *pmove=m_ptop;
cout<
while(pmove!=NULL){
cout<"<m_data;
pmove=pmove->m_pnext;
}
cout<top"<
}
Test.cpp
#include
using namespace std;
#include "LinkStack.h"
int main(){
LinkStack 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.Print();
cout<
stack.Print();
cout<
stack.Print();
stack.MakeEmpty();
stack.Print();
stack.Pop();
return 0;
}