栈与栈的应用

一、阅读源码,得知,stack类继承自Vector,而Vector相当于线程安全的arraylist(相反的arraylist相当于线程不安全的Vector)
二、删除的经典代码:
elementCount--;
elementData[elementCount] = null; /* to let gc do its work /
三、顺序栈,链式栈(链式栈比顺序栈节省内存空间,因为他不需要扩容)
链表的逆序排序,就用到了入栈出栈操作
四、例:a>>1与a/2,哪个性能好?a<<1 与a
2 哪个性能好,当然移位运算性能好了,这就涉及到我们要讲的逆波兰表达式,高级语言中a/2需要六个指令才能完成,而位移只需要一个指令就能完成
逆波兰表达式:中缀表达式--->后缀表达式:
1)秘诀:数字输出,运算符进栈,括号匹配出栈,比栈顶优先级低就出栈
2)后缀表达式如何计算:数字入栈;符号取两个进行计算,再入栈
高级语言不是操作硬件

五、递归:大问题--->小问题
如 //递归
public static void func(int n) {
System.out.println(n);
if (n < 0) {
return;
} else {
func(n-1);//递归调用自己后的所有的代码都会压入一个栈
System.out.println(n);
}
}
结果:
3
2
1
0
-1
0
1
2
3
涉及到方法栈,方法栈在后台也是用链式结构来存储的


image.png

你可能感兴趣的:(栈与栈的应用)