請寫出JAVA彈棧壓棧的步驟, 棧的存儲方式


一.棧的作用

1. 棧的存放
  • 局部變量
  • 堆中對象的引用(對象在堆內存中的地址)
  一個對象的大小無法估計,但是一個對象的引用只占4byte
  基本數據類型的變量沒有什么存儲區域的說法,內存中分為兩類進行存儲    
    • 全局變量存儲在堆中
    • 局部變量存儲在棧中    
 
 
2. 棧的屬性
  • 棧的創建方式
    • 每條線程都有一個獨立的棧,在線程創建時創建

  

二.棧的操作

 1. 棧的存取順序是先進后出,后進先出,就像是手槍彈夾,后進去的先打出來;
 
 2. 代碼模擬
public class SQ {
    //先規定棧的最大容量
    Object[] objs ;
    //獲取當前棧容量
    int size;

    public SQ(int MaxLen){
        this.objs = new Object[MaxLen];
    }


    //進行壓棧操作(就是在棧中存入內容)
    public void push(Object x){
        System.out.println("壓棧操作,壓入內容為"+( objs[size++] = x));  //先給當前指針位置賦值,然后指針變大

    }

    //彈棧操作
    public void popu() {
        System.out.println("彈出棧頂內容:"+objs[size-1]);//獲取棧頂數據,然后彈出棧中,棧容量減少
        size--;
    }

    //獲取棧內所有數據
    public void getAllStack() {
        System.out.println("棧頂到棧底所有數據為");
        for (int i = size-1; i >= 0; i--) {
            System.out.println(objs[i]+" ");
        }
    }

    public static void main(String[] args) {
        SQ s = new SQ(20);
        s.push(1);
        s.push(2);
        s.push(3);
        s.push(4);
        s.getAllStack();
        s.popu();
        s.popu();
        s.getAllStack();
    }
}
output:
壓棧操作,壓入內容為1
壓棧操作,壓入內容為2
壓棧操作,壓入內容為3
壓棧操作,壓入內容為4
棧頂到棧底所有數據為
4 
3 
2 
1 
彈出棧頂內容:4
彈出棧頂內容:3
棧頂到棧底所有數據為
2 
1 
 
 
 

三.棧和棧幀

1. 棧幀的作用和定位
  • java棧以幀為單位來保存線程的狀態
  • jvm對java棧只進行兩種操作
    • ----以為單位的壓棧和彈棧
 
2.局部變量表
  局部變量,他是class文件里面的內容,加載后被傳遞到方法區,參見 Class類詳解
    

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">






免責聲明!

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



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