入棧和出棧規律


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明顯不按逆序,也就是倒序排列,所以是有問題的 。以后碰到這個出棧順序的面試題時,就可以分分鍾選對了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM