Linked Stack
链栈
定义
链栈是用链式存储实现的 栈。通常把链表头部作为栈顶,因为头插和头删都只需要 O(1)。
1 | typedef struct StackNode { |
不带头结点时,空栈可表示为:
1 | LinkStack top = NULL; |
进栈
进栈等价于单链表头插:
1 | bool Push(LinkStack *top, ElemType value) { |
先让 newNode->next 指向原栈顶,再更新 top,这样原栈不会丢失。
出栈
出栈等价于单链表头删:
1 | bool Pop(LinkStack *top, ElemType *value) { |
需要先保存原栈顶结点 target,否则更新 top 后不方便释放原结点。
特点
- 不需要预先确定最大容量。
- 结点需要额外指针域,空间开销比顺序栈大。
- 只要内存可申请,通常不考虑“栈满”;但申请失败仍要处理。
链栈和 单链表头插头删 的代码结构非常接近,区别在于链栈只暴露栈顶操作。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Elian's blog page!