栈的链式存储结构比较简单,将它与单链表做个对比来看:栈顶相当于单链表的表头,top指针相当于单链表的头指针,不存在头结点,简单来说,这里的s->top指向栈顶的第一个元素。
先来看一下整个栈链的定义:
typedef struct LinkStack
{
LinkStackPtr top;//充当头指针
int count;
}
再来看一下栈链的结点的定义:
typedef struct StackNode
{
ElemType data;
struct StackNode *next;
}StackNode,* LinkStackPtr;
还是两块,一块存放栈的数据,一块存放指针,指向下一个元素。
下面我们来了解一下进栈与出栈在链式结构下的操作。
1、进栈
申请空间给结点p,p中存放数据e,p->data=e,进行下列操作:
p->next=s->top;
s->top=p;
最后不要忘记给s中的计数器加1,s->count++;
2、出栈
用p结点存放被删结点,释放p,计数器减1即可。
p=s->top;
s->top=p->next;
free(p);
s->count--;
注:栈只能在栈顶进行操作,所以只需要对s->top进行移动即可。
BY ZJQ