感谢尚硅谷韩顺平老师深入细致的讲解
栈是一个先入后出的有序列表(FILO)。是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种操作受限列表。允许插入和删除的一端为变化的一端,成为栈顶;另一端固定,成为栈底。由此可知,最先放入栈中的元素在栈底,最后放入的元素在栈顶,操作就是入栈(push)。而删除元素正好相反,最后放入的元素最先删除,最先放入的元素最后删除,操作就是出栈(pop)。栈可以用数组或者链表实现。
栈的应用场景:
1)子程序的调用:在跳往子程序前,会将下个指令的地址存在栈中,知道子程序执行完后再将地址取出,以回到原来的程序中。
2)处理递归:和子程序的调用类似,只是除了存储下一个指令的地之外,也将参数、局部变量等数据存入栈中。
3)表达式的转换与求值,例如求 7*2+(4+5)/3-3
4)二叉树的遍历
5)图的深度优先算法
使用数组实现栈:
class ArrayStack {
private int maxSize; // 栈的大小
private int[] stack; // 数组,数组模拟栈&