定义
栈(stack):是限定仅在表尾进行插入和删除操作的线性表。
把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In Fist Out)的线性表,简称LIFO。
注意:
1.栈是一个线性表,一种特殊的线性表,栈元素具备线性关系,也就是前驱和后继的关系。定义中规定了只能在线性表的表尾进行删除和插入操作,在栈中表尾称为栈顶,而不是栈底。
2.栈的特殊性限制了这个线性表的插入和删除位置,始终是在栈顶进行,因此栈底是固定的,最先进栈的只能在栈底。
栈的插入操作,叫作进栈,也称作压栈、入栈。
栈的删除操作,叫作出栈,也称作弹栈。
进栈出栈变化形式
栈对线性表的插入和删除的位置进行了限制,并没有对元素进出的时间进行限制,也就是说,在不是所有元素都进栈的情况下,事先进去的元素也可以出栈,只要保证是栈顶元素出栈就可以。
栈的抽象数据类型
ADT 栈(stack)
Data
同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系。
Operation
InitStack(*S):初始化操作,建立一个空栈S。
DestroyStack(*S):若栈存在,则销毁它。
ClearStack(*S):将栈清空。
StackEmpty(S):若栈为空,返回true,否则返回false。
GetTop(S,*e):若栈存在且非空,用e返回S的栈顶元素。
Push(*S,*e):若栈存在,插入新元素e到栈S中并成为栈顶元素。
Pop(*S,*e):删除S中栈顶元素,并用e返回其值。
StackLength(S):返回栈S的元素个数。