入栈和出栈规律

1.由来

jvm中堆主要是用来存对象的,比如Object obj= new Object(),obj就是存在jvm的堆中的,栈则是用来存成员属性的,每一个线程都有一个独立的栈,前面的obj同样也会在栈中保存一个,但是保存的不是对象,而是obj在堆中的内存地址。当堆中的对象没有栈中的指针指向它时,就会被GC垃圾回收装置回收,栈的存取速度大于堆,小于寄存器,但是必须指定大小和生命周期。

2.入栈出栈规则

先进后出,不一定要全部入栈之后再出栈,没入栈完也可以先出栈

3.任何出栈元素后面的元素必须满足两条规则

1.在原序列(也就是入栈序列)中顺序比出栈元素小的,必须是逆序

2.在原序列(也就是入栈序列)中顺序比出栈元素大的,顺序无所谓

3.出栈元素表示的是出栈后面的所有元素

比如入栈的是12345,下面两种出栈方式不可能:

a. 1 5 4 3 2  这个先看第一个元素1,1后面的元素每一个都比这个大,所以无所谓什么顺序,再看第二个元素5,5后面的元素都比这个数小,所以都必须遵循逆序,而432遵循逆序,所以没问题。。。

b. 4 3 5 1 2  这个先看第一个元素4,4后面比它小的是312,而这个12明显不按逆序,也就是倒序排列,所以是有问题的 。以后碰到这个出栈顺序的面试题时,就可以分分钟选对了。

猜你喜欢

转载自www.cnblogs.com/javalisong/p/12187605.html