栈的链式存储结构及其基本运算的实现
采用链式存储的栈,规定栈的所有操作都在单链表的表头进行。
节点*p进栈的操作是在头结点*s之后插入节点*p,出栈的操作是取出头结点*s之后的节点的data值,并将该节点删除。
(1)初始化栈
void InitStack(LiStack *&s)
{
s=(LiStack *)malloc(sizeof(LiStack));
s-next=null;
}
(2)销毁栈 DestroyStack(s)
void DestroyStack(LiStack *&s)
{
LiStack *p=s,*q=s->next;
while(q!=null)
{
free(p);
p=q;
q=p->next;
}
free(p);
}
(3)判断栈是否为空StackEmpty(s)
bool StackEmpty(LiStack *s)
{
return (s->next==null);
}
(4)进栈Push(s,e)
void Push(LiStack *&s,ElemType e)
{
LiStack *p;
p=(LiStack *)malloc(sizeof(Listack));
p->data=e;
p->next=s->next;
s->next=p;
}
(5)出栈Pop(s,e)
bool Pop(LiStack *&s,ElemType &e)
{
LiStack *p;
if(s->next==null)
return false;
p=s->next;
e=p->data;
s->next=p->next;
free(p);
return true;
}