链栈 基本成员函数
//单链表实现 初始时:head->next==NULL
//优点:不需要考虑栈满上溢出的情况
//栈空:head->next==NULL
#include <iostream>
using namespace std;
//单链表实现 初始时:head->next==NULL
//优点:不需要考虑栈满上溢出的情况
//栈空:head->next==NULL
template<typename T>
struct LinkStack//链栈结点类型
{
T data;//数据域
LinkStack *next;//指针域
};
template<typename T>
class LinkStackClass//链栈类模板
{
LinkStack<T> *head;//链栈头结点指针
public:
LinkStackClass();
~LinkStackClass();
bool StackEmpty();
void Push(T e);
bool Pop(T &e);
bool GetTop(T &e);
};
template<typename T>
LinkStackClass<T>::LinkStackClass()
{
head=new LinkStack<T>();
head->next=NULL;
}
template<typename T>
LinkStackClass<T>::~LinkStackClass()
{
LinkStack<T>*pre=head,*p=pre->next;
while(p!=NULL)
{
delete pre;
pre=p;p=p->next;
}
delete pre;
}
template<typename T>
bool LinkStackClass<T>::StackEmpty()
{
return(head->next==NULL);
}
template<typename T>
void LinkStackClass<T>::Push(T e)
{
LinkStack<T>*p=new LinkStack<T>();
p->data=e;
p->next=head->next;
head->next=p;
}
template<typename T>
bool LinkStackClass<T>::Pop(T &e)
{
LinkStack<T>*p;
if(head->nxet==NULL)return 0;
p=head->next;
e=p->data;
head->next=p->next;
delete p;
return 1;
}
template<typename T>
bool LinkStackClass<T>::GetTop(T &e)
{
LinkStack<T>*p;
if(head->next==NULL)return 0;
p=head->next;
e=p->data;
return 1;
}