#include <iostream>
using namespace std;
#ifndef LINKSTACK_H_INCLUDED
#define LINKSTACK_H_INCLUDED
template <class ElemType>
struct SNode
{
ElemType data;
SNode* next;
};
template <class ElemType>
class LinkStack
{
private:
SNode<ElemType>* base;
SNode<ElemType>* top;
public:
LinkStack();
~LinkStack();
SNode<ElemType>* Base(){return base;}
SNode<ElemType>* Top(){return top;}
void ClearStack();
bool StackEmpty(){return base==top;}
int StackLength();
bool GetTop(ElemType& e);
bool Push(ElemType e);
bool Pop(ElemType& e);
};
template <class ElemType>
LinkStack<ElemType>::LinkStack()
{
top=new SNode<ElemType>;
base=top;
top->next=NULL;
}
template <class ElemType>
LinkStack<ElemType>::~LinkStack()
{
while(top)
{
base=top->next;
delete top;
top=base;
}
}
template <class ElemType>
void LinkStack<ElemType>::ClearStack()
{
SNode<ElemType>* p=NULL;
base=top->next;
while(base)
{
p=base->next;
delete base;
base=p;
}
base=top;
top->next=NULL;
}
template <class ElemType>
int LinkStack<ElemType>::StackLength()
{
int i=0;
SNode<ElemType>* p=top;
while(p!=base)
{
p=p->next;
i++;
}
return i;
}
template <class ElemType>
bool LinkStack<ElemType>::GetTop(ElemType& e)
{
if(top==base)
{
return false;
}
else
{
e=top->next->data;
return true;
}
}
template <class ElemType>
bool LinkStack<ElemType>::Push(ElemType e)
{
SNode<ElemType>* p=new SNode<ElemType>;
if(!p)
{
return false;
}
else
{
p->data=e;
p->next=top->next;
top->next=p;
if(top==base)
{
base=p;
}
return true;
}
}
template <class ElemType>
bool LinkStack<ElemType>::Pop(ElemType& e)
{
if(top==base)
{
return false;
}
else
{
SNode<ElemType>* p=top->next;
e=p->data;
top->next=p->next;
if(p==base)
{
base=top;
}
delete p;
return true;
}
}
#endif // LINKSTACK_H_INCLUDED
简单数据结构的实现之链栈
最新推荐文章于 2021-07-19 18:32:25 发布