栈的定义:栈是限定仅在表尾进行插入和删除操作的线性表
允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈,栈又称为后进先出(last in first out)的线性表简称lifo结构(好比子弹弹匣,后装填的先打出去)
注意事项:栈元素具有线性关系,因为栈是一个特殊的线性表,定义里说的表尾是指栈顶不是栈底,删除和插入操作只能在栈顶,栈底是固定的,最先进栈的只能在栈底
栈的插入操作叫进栈也叫压栈,入栈(push)。 栈的删除操作叫出栈(pop)
进栈出栈的变化
并不是所有最先进栈的元素都只能是最后出栈,在不是所有元素都进栈的情况下,先进去的元素也可以出栈,只要保证是栈顶元素就行
例:有三个整形数字1 2 3 依次进栈
1 1 2 3依次进栈,然后321出栈 出栈次序321
2 1进1出2进2出3进3出 进一个出一个 出栈次序123
3 1进 2进 2出 1出 3进3出 出栈次序213
4 1进 1出 2进 3进 3出 2出 出栈次序132
5 1进2 进 2出 3进 3出 1出 出栈次序231
当然312这样的出栈次序是不可能的
栈的顺序存储结构——进栈操作
栈满返回异常,栈顶指针加一,将新元素赋值给栈顶空间
栈的顺序存储结构——出栈操作
栈顶指针-1,将要删除的栈顶元素返回
一个栈的缺陷:必须事先确定数组存储空间大小,万一不够用了,就需要编程手段来扩展数组容量,但对于两个相同类型的栈。可以做到最大限度地利用先开辟出来的空间进行操作
数组有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的起始端,下标0处,另一个栈为数组的末端,下标为数组长度n-1处,如果两个栈增加元素就是两端点向中间延伸,只要两个栈的栈顶不见面就可以一直使用
top1 + 1 == top2时则栈满(top为栈下标)
一般只有当两个栈的空间需求有相反关系是,也就是一个栈增长时另一个在缩短(切记相同类型的)
原文:https://www.cnblogs.com/summervan/p/8746481.html