链栈不是顺序存储,因此弹出后需要释放空间;
压栈:新建栈元素 》赋值》链接到栈顶》top++
弹栈:返回栈顶元素》临时保存栈顶空间》top--》free原栈顶
链栈存储结构
#include "datastr.h"
typedef struct StackNode {
ElemType data;
struct StackNode* next;
}StackNode,*LinkStack;
初始化
Status InitStack(LinkStack S) {
S = NULL; return OK;
}
进栈
Status Push(LinkStack S, ElemType e) {
LinkStack p = (StackNode*)malloc(sizeof(StackNode));
p->data = e;
p->next = S;
S=p;
return OK;
}
出栈
Status Pop(LinkStack S, ElemType* e) {
if (!S) return ERROR;
e = S->data;
LinkStack p = S;//链栈不是顺序存储,因此弹出后需要释放空间;
S = S->next;
free(p);
return OK;
}