栈可以理解为一种受限的线性表,只能在表尾插入和删除元素。
栈有线性表的特点:每个元素都有且之后一个前驱节点和一个后继节点(第一个节点只有后继节点,最后一个节点只有前驱节点)
同时也有自身的特点:后入先出
术语
栈顶:允许插入和删除元素的一端
栈底:与栈顶相对的一端
入栈:插入数据操作
出栈:删除数据操作
抽象数据类型
ADT 栈(stack)
Data
同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系
Operation
InitStack(*S) // 初始化操作,建立一个空栈S
DestroyStack(*S) // 若栈存在,则销毁它
ClearStack(*S) // 将栈清空
StackEmpty(S) // 若栈为空返回true,否则返回false
GetTop(S, *e) // 若栈存在且非空,用e返回S的栈顶元素
Push(*S, e) // 若栈S存在,插入新元素e到栈S中并成为栈顶元素
Pop(*S, *e) // 删除S中栈顶元素,并用e返回其值
StackLength(S) // 返回栈S的元素个数
endADT
存储结构
同线性表一样,有两种存储结构:顺序存储结构和链式存储结构
栈较动态数组(Deque)、链表(List)来说属于高级容器,它可以在Deque或者List基础上进行实现
顺序存储结构的栈是在Deque基础上进一步封装实现的,链式存储结构的栈就是在List基础上实现的
核心函数如下:</