链栈的进栈push和出栈pop操作都很简单,没有任何循环操作,时间复杂度均为O(1)。
至于链栈的出栈pop操作,也是很简单的三句操作。
- 假设变量p用来存储要删除的栈顶结点,
- 将栈顶指针下移一位,
- 最后释放p即可,
如图4-6-3所示。类似于头删
图4-6-3
/* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */Status Pop(LinkStack *S, SElemType *e){LinkStackPtr p;if (StackEmpty(*S))return ERROR;*e = S->top->data;/* 将栈顶结点赋值给p,如图③ */p = S->top;/* 使得栈顶指针下移一位,指向后一结点,如图④ */S->top = S->top->next;/* 释放结点p */free(p);S->count--;return OK;}
链栈的进栈push和出栈pop操作都很简单,没有任何循环操作,时间复杂度均为O(1)。
