绪论
大致地看了一下,这一章主要介绍的是栈的概念及其运用。除了一些最为人熟知的如递归栈,波兰逆波兰表达式,还有一些比较特殊的课本上没有的应用。
Stack ADT
linear(线性的),说明栈依旧是一个线性的数据结构。栈的基本操作比较少,就是进栈,出栈,创建(销毁)和判空(判满这个操作是有点争议的,因为链栈是不会出现爆栈的情况)。
栈有链表和数组的两种实现方式:
Singly linked lists
前面的单链表的模板类:
基于单链表的链栈的模板类:
事实上所有的操作都是lecture 2单链表的copy。
empty()
判断链表是否为空:
push()
链栈中,链表元素的相对次序和栈中元素的相对次序相反。也就是说栈顶结点是链表的第一个结点(这样定义更方便进行进栈操作)。
单链表:
pop(),top()
同理pop和top就是链表的pop_front和front。