数据结构之链栈实现

来源:互联网 发布:十大网络主播评选活动 编辑:程序博客网 时间:2024/05/21 17:30

       顺序栈和链栈的优缺点在我就不赘述了,她们只是存储方式的区别罢了。不过链栈的好处就是她存储数据的数量是动态变化的,只在你需要的时候增加或删除。这里需要重提的一个问题是在使用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;}