顺序栈和链栈的优缺点在我就不赘述了,她们只是存储方式的区别罢了。不过链栈的好处就是她存储数据的数量是动态变化的,只在你需要的时候增加或删除。这里需要重提的一个问题是在使用free()函数释放空间后需要将指针置空,防止野指针。
typedef struct StackNode
{
int data;
struct StackNode *next;
}StackNode;
typedef struct
{
StackNode *top;//栈顶指针
}LinkStack;
//1.创建一个空栈
int initstack(LinkStack *S)
{
S->top = NULL;
}
//2.判断是否为空栈
int isempty(LinkStack *S)
{
if(NULL == S->top)
return 0;
else
return -1;
}
//3.入栈
int push(LinkStack *S,int value)
{
StackNode *p;
p = (StackNode *)malloc(sizeof(StackNode));
if(NULL == p)
{
printf("over flow!\n");
return -1;
}
p->data = value;
p->next = S->top;
S->top = p;
return 0;
}
//4.出栈
int pop(LinkStack *S)
{
int value = 0;
if(!isempty(S))
return -1;
value = S->top->data;
S->top = S->top->next;
free(S->top);
S->top = NULL;//防止野指针
return value;
}