测试环境:vs2010 windows7
stack.hpp
template<class T>
class LinkStack
{
private:
int NodeNum;
struct Node //栈的节点
{
T data;
struct Node *next;
};
struct Node *pTop;//栈顶
public:
LinkStack();
~LinkStack();
void push(T data);//入栈
T pop(); //出栈
bool isEmpty();
void clear();
int size();
};
template<class T>
LinkStack<T>::LinkStack()
{
this->NodeNum = 0;
this->pTop = NULL;
}
template<class T>
LinkStack<T>::~LinkStack()
{
this->clear();
}
template<class T>
int LinkStack<T>::size()
{
return NodeNum;
}
template<class T>
bool LinkStack<T>::isEmpty()
{
return pTop == NULL;
}
template<class T>
void LinkStack<T>::clear()
{
struct Node *pTmp;
while(pTop != NULL)
{
pTmp = pTop;
pTop = pTop->next;
delete pTmp; //释放内存
}
NodeNum = 0;
pTop = NULL;
}
template<class T>
void LinkStack<T>::push(T data)
{
struct Node *node= new Node;
node->data = data;
node->next = NULL;
if(pTop == NULL)
{
pTop = node;
}
else
{
node->next = pTop;
pTop = node;
}
NodeNum++;
}
template<class T>
T LinkStack<T>::pop()
{
struct Node *pTmp;
T tmp;
if(pTop == NULL)
{
return 0;
}
else
{
pTmp = pTop;
pTop = pTop->next;
tmp = pTmp->data;
delete pTmp; //释放内存
NodeNum--;
return tmp;
}
}
test.cpp
#include<iostream>
#include"stack.hpp"
using namespace std;
void main()
{
LinkStack<int> stack;
for(int i=0;i<10;i++)
{
stack.push(i);
}
while(!stack.isEmpty())
{
cout<<stack.pop()<<endl;
}
cin.get();
}