链式栈
- 链式栈无栈满问题,空间可以扩充
- 插入与删除仅在栈顶处执行
- 链式栈的栈顶在链头
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181211193451652.png)
链式栈的定义
//定义链式结点
typedef struct _node
{
Data data; //结点数据
struct _node *next; //结点链指针
}Node;
typedef struct _stack
{
Node *top; //栈顶指针
}Stack;
链式栈操作的实现
链式栈初始化
void Init(Stack *s)
{
if (NULL == s)
return;
s->top = NULL;
}
链式栈入栈
void Push(Stack *s, Data data)
{
if (NULL == s)
return;
Node *node = (Node *)malloc(sizeof(Node)/sizeof(char));
node->data = data;
node->next = s->top;
s->top = node;
}
链式栈出栈
void Pop(Stack *s)
{
if (NULL == s)
return;
if (TRUE == Empty(s))
return;
Node *p = s->top;
s->top = p->next;
free(p);
}
链式栈取栈顶
Data GetTop(Stack *s)
{
if (NULL == s)
return;
return s->top->data;
}
判断链式栈是否为空
BOOL Empty(Stack *s)
{
if (NULL == s)
exit(-1);
if (s->top != NULL)
return FALSE;
return TRUE;
}