堆疊—堆疊基本加入與刪除 - 筆記長也

堆疊—堆疊基本加入與刪除

2018-01-22 12:52:00   資料結構

堆疊

堆疊是一個很簡單的資料結構,是一種先進後出 FILO 且只有單一出口的線性結構,例如把 A.B.C 依序放入堆疊,最後取出的順序會是  C.B.A。

Push

在堆疊當中,把資料放入稱為 push。

Pop

在堆疊當中,將資料取出稱為 Pop。

圖解

如圖所示,最常見的生活例子是洋芋片罐,符合先進先出而且只有單一出入口。程式當中,遞迴也屬於一種堆疊。

實作範例

堆疊可以利用陣列及鏈結串列實作,這邊以 JAVA 的陣列為例。

其實在諸多的程式語言當中已經提供了堆疊實作的方法,例如 JavaScript 提供了 push() 以及 pop() 來操作陣列,push 會將資料放入陣列末端,而 pop 會取出陣列末端的資料,符合了堆疊單一出入口且先進先出的特性。

        Scanner input=new Scanner(System.in);
        System.out.println("Please Keyin MAX:");
        int max = input.nextInt();
        String[] st=new String[max];
        int top=-1;
        System.out.println("<1>insert  <2>delete  <3>showData  <4>exit");
        while(true){    
            int inpu=input.nextInt();
            if(inpu==1){
                if(top>=max-1){
                    System.out.println("堆疊已經滿了!!!");
                }
                else{
                    top++;
                    System.out.print("請輸入要加入的資料:");
                    st[top]=input.next();
                    System.out.println("資料已加入");
                }
            }
            else if(inpu==2){
                if (top<0){
                    System.out.println("堆疊是空的!!");
                }
                else{
                    st[top]="";
                    top--;
                    System.out.println("資料已被刪除");
                    }
            }
            else if (inpu==3){
                if(top<0){
                    System.out.println("堆疊是空的!!");
                }
                else{
                    for (int i =top;i>-1;i--){
                      System.out.println(String.format("st [ %d ]  = %s ",i,st[i]));
                    }
                }
                
            }
            else if (inpu==4){
                System.exit(0);
            }
 
執行結果:
run:
Please Keyin MAX:
3
<1>insert  <2>delete  <3>showData  <4>exit
1
請輸入要加入的資料:a
資料已加入
1
請輸入要加入的資料:ab
資料已加入
1
請輸入要加入的資料:abc
資料已加入
1
堆疊已經滿了!!!
3
st [ 2 ]  = abc 
st [ 1 ]  = ab 
st [ 0 ]  = a 
2
資料已被刪除
3
st [ 1 ]  = ab 
st [ 0 ]  = a 
 

關於作者


長也

資管菸酒生,嘗試成為網頁全端工程師(laravel / React),技能樹成長中,閒暇之餘就寫一些筆記。 喔對了,也愛追一些劇,例如火神跟遺物整理師,推推。最愛的樂團應該是告五人吧(?)