链栈 不需要头节点
判断栈为空的条件就是top==NULL
typedef struct StackNode
{
struct StackNode * next;
int data;
}StackNode;
typedef struct Stack
{
StackNode * top;
int count;
}Stack;
栈的初始化
void initStack(Stack * psk)
{
assert(psk);
psk->top = NULL;
psk->count = 0;
}
入栈与出栈
int Push(Stack * psk, int x)
{
StackNode * tmp = (StackNode*)malloc(sizeof(StackNode));
tmp->data = x;
tmp->next = psk->top;
psk->top = tmp;
psk->count++;
return 0;
}
int Pop(Stack*psk, int *x)
{
if (psk->top == NULL)
{
return -1;
}
StackNode * tmp = psk->top;
psk->top = psk->top->next;
*x = tmp->data;
free(tmp);
psk->count--;
return 0;
}