链栈的特点:
1.不需要头结点
2.不存在栈满的情况
3.栈的功能函数
int StackInit(Stack **s)//初始化栈
{
if (NULL == s)
{
return FAILURE;
}
(*s) = (Stack *)malloc(sizeof(Stack) * 1);
if (NULL == (*s))
{
return FAILURE;
}
(*s)->top = NULL;
(*s)->count = 0;
return SUCCESS;
}
int StackEmpty(Stack *s)//判断栈是否为空
{
if (NULL == s)
{
return FAILURE;
}
return (s->top == NULL) ? TRUE : FALSE;
}
int push(Stack **s, ElemType e)//进栈
{
if (NULL == s || (*s) == NULL)
{
return FAILURE;
}
Node *p = (Node *)malloc(sizeof(Node)); //给结点分配空间
if (NULL == p)
{
return FAILURE;
}
p->data = e; //数据域
p->next = (*s)->top;
(*s)->top = p;
(*s)->count++;
return SUCCESS;
}
int GetTop(Stack *s)//获取栈顶元素
{
if (NULL == s || s->top == NULL)
{
return FAILURE;
}
return s->top->data;
}
int pop(Stack **s)//出栈
{
if (NULL == s || NULL == *s)
{
return FAILURE;
}
Node *p = (*s)->top;
ElemType e = (*s)->top->data;
(*s)->top = (*s)->top->next;
(*s)->count--;
free(p);
return e;
}
int StackClear(Stack **s)//清空栈
{
if (NULL == s || NULL == *s)
{
return FAILURE;
}
Node *p = (*s)->top;
while (p)
{
(*s)->top = p->next;
free(p);
p = (*s)->top;
(*s)->count--;
}
return SUCCESS;
}
int StackDestroy(Stack **s)//销毁栈
{
if (NULL == s || NULL == *s)
{
return FAILURE;
}
free(*s);
(*s) = NULL;
return SUCCESS;
}