链栈的存储结构
//栈顶就是链表的首结点,因此一般链栈不需要设置头结点
typedef struct StackNode
{
ElemType data;
struct StackNode *next;
}StackNode, *LinkStack;
初始化
Status InitStack(LinkStack *S)
{
S = NULL;
return OK;
}
入栈
//头插法入栈
Status Push(LinkStack *S, SElemType e)
{
/*
StackNode* p;
p = (StackNode *)malloc(sizeof(StackNode));
*/
p = new StakcNode;
p->data = e;
//关键操作
//因为头结点不为空,所以入栈的结点可以直接作为头结点
//要区别于链表的头插法
p->next = S;
S = p;
return OK;
}
出栈
Status Pop(LinkStack *S, ElemType *e)
{
if(S==NULL)
return ERROR;
*e = S->data;
p = S;
S = S->next;
delete p;
return OK;
}