栈是一种用于存储数据的简单数据结构。
定义
栈是一个有序线性表,表中元素的插入和删除操作只在同一端进行。先插入的元素后删除,后插入的元素先删除。因此,栈也被称为后进先出(Last In First Out, LIFO)或先进后出(First In Last Out, FILO)线性表。
类似于摞盘子和取盘子,通常先放的盘子在下面,后放的盘子往上叠加,在取盘子的时候只能从上往下。就出现了,先放的盘子在下面,所以慢取出;后放的盘子在上面,先取出。类似于栈的入栈push和出栈pop操作。
操作
- 入栈(push):将元素存储到栈顶,并更新栈顶位置信息。
- 出栈(pop):将栈顶元素取出、删除,并返回给调用者。
异常
- 溢出:对一个满栈进行入栈操作出现的异常。
- 下溢:对一个空栈进行出栈操作出现的异常。
方法构成
假设栈存储的数据类型为整型。
1.主要方法
- void push(int data): 将data(数据)插入栈。
- int pop():删除并返回最后一个插入栈的元素。
2.可选的辅助方法 - int top(): 返回最后一个插入栈的元素,但不删除。
- int size(): 返回存储在栈中元素的个数。
- int isEmpty(): 判断栈中是否有元素。
- int isStackFull(): 判断栈中是否存满元素。
应用
1.直接应用
- 符号匹配
- 实现函数的调用(包括递归)
- 求范围误差(极差)
2.间接应用
- 作为一个算法的辅助数据结构(例如,树遍历算法)
- 其他数据结构的组件
针对栈的应用,我会在后面的应用过程中找一些例子进行补充。