基本概念
使用带头结点的单链表表示栈,头结点指向的即为栈顶,也就是说入栈就是所谓的头插法入栈,出栈也是从头结点的下一个节点出。
空栈条件s->next==NULL
栈满条件:由于链表的内存是随时申请和释放的,所以在内存允许的范围内是没有栈满条件的。
进栈:将包含数据的节点插入到头结点之后。
退栈:将头节点之后的节点删除,并释放其所占内存。
代码
stack.c
/*********************栈的链式存储结构******************************/
void InitStack_Lk(LkStack& s)//初始化一个空栈
{
s = (LkStack)malloc(sizeof(LStkNode));//创建一个头指针
s->next = NULL;//空指针,空栈。
}
void DestroyStack_Lk(LkStack& s)
{
LkStack p,q;
p = s;
while (p!=NULL)
{
q = p->next;
free(p);
p = q;
}
}
//课件写法
//void DestroyStack_Lk(LkStack& s)
//{
// LkStack p, q;
// p = s;
// q = s->next;
// while (q!=NULL)
// {
// free(p);
// p = q;
// q = p->