顺序栈
s.base s.top 指针
判断栈满: s.top-s.base==stacksize;
判断栈空:s.top==s.base
清空栈:if(s.base) s.top=s.base,stacklen=0;
销毁栈: if(s.base){ free(s.base) ; stacksize=0; s.top=s.base=null;}
入栈:
if(s.top-s.base==stacksize) return ERROR;栈满,报错
*s.top=e; s.top++;
return OK;
出栈
if(s.top==s.base) return ERROR;
--s.top; e=*s.top;
return OK;
链栈
(指针的方向由栈顶指向栈底)
链表的头指针是栈顶;不需要头结点;空栈相当于头指针指向空;插入删除仅在栈顶执行
初始化: s=null;
判断链栈是否为空: if(s==null) return ok;
获取栈顶元素: if(s!=null){ return s->data; }
链栈的入栈:
p=malloc(sizeof(stacknode));
p->data=e; p->next=s; s=p;
return ok;
链栈的出栈
if(s==null) return null;
s=s->data; p=s; s=s->next; free(p);
return ok;