堆栈的特点:先进后出
堆栈的头节点的定义
template<class T>
struct StackNode
{
T data;
StackNode<T> *link;
StackNode(){link=NULL;}
StackNode(T d,StackNode<T> *next=NULL)
{
data = d;
link = next;
}
};
链栈的类的定义
template <class T>
class LinkdeStack //成员函数有构造、入栈、出栈、栈的判空与判满、访问栈顶元素、销毁等操作。
{
StackNode<T> *top;//链栈的栈顶指针
public:
LinkdeStack(); //默认构造函数
~LinkedeStack(); //析构函数
void Push(T x);//入栈
T Pop();//将top指针所指元素出栈、并返回这个出栈的元素
T GetTop();//获取栈顶元素
bool IsEmpty();//判断堆栈是不是为空
};
算法程序实现
(1)默认构造函数
template<class T>
LinkdeStack::LinkdeStack()
{
top=NULL;
}
(2)析构函数
template<class T>
LinkdeStack::~LinkdeStack()
{
StackNode<T> *p=top;
StackNode<T> *r;
while(p)
{
r=p;
p=p->link;
delete r;
}
top=NULL;
}
(3)入栈
template<class T>
LinkdeStack<T>::Push(T x)
{
s=new StackNode<T>;
s->data=x;
s->link=top;
top=s;
}
(4)T Pop();//将top指针所指元素出栈、并返回这个出栈的元素
template<class T>
T LinkdeStack::Pop()
{
if(top==NULL) {cout<<"below out!";exit(1);}
x=top->data;
StackNode<T> *p = top;
top=top->link;
delete p;
return x;
}
(5)T GetTop();//获取栈顶元素
template<class T>
T LinkdeStack::GetTop()
{
if(top==NULL) {cout<<"below out!";exit(1);}
return top->data;
}
(6)bool IsEmpty();//判断堆栈是不是为空
template<class T>
bool LinkdeStack::IsEmpty()
{
return top==NULL;
}