java棧的代碼實現及理解


什么是java棧?

剛開始我也不知道什么是java棧,只知道棧是LIFO(后進先出),隊列是FIFO(先進先出),其實棧就是java的一種數據結構,用java的基礎數據類型構造的一種數據結構。

而棧的底層是通過數組實現的。沒啥了不起,它就是一個java類,這個類里面寫了一些入棧,出棧的方法,而底層是用了數組來存放數據而已。來看看代碼就明白了

 

package com.ch.interfacemanager.test;

public class SqStack {
         
        private Object[] stackElem;//數組就是棧的本質 private int top;        //top棧頂,其實就是一個數組下標 public SqStack(int maxSize)
        {
            stackElem=new Object[maxSize];
            top=0;
        }
     
        //清空
        public void clear()
        {
            top=0;
        }
        //是否為空
        public boolean isEmpty()
        {
            return top==0;
        }
        //元素個數(也就是棧的大小)
        public int length()
        {
            return top;
        }
        //棧頂
        public Object peek()
        {
            if(!isEmpty())
                return stackElem[top-1];
            else
                return null;
        }
     
        //入棧
        public void push(Object x) throws Exception
        {
            if(top==stackElem.length)
            {
                throw new Exception("棧已滿!");
            }
            else
            {
                stackElem[top++]=x;
            }
        }
        //出棧
        public Object pop() throws Exception
        {
            if(top==0)
            {
                throw new Exception("棧為空!");
            }
            else
                return stackElem[--top];  //刪除然后返回現在的棧頂
        }
     
        //打印(從棧頂到棧底)
        public void display()
        {
            for(int i=length()-1; i>=0; i--)
            {
                System.out.print(stackElem[i]+" ");
            }
            System.out.println();
        }
        
        //jiancha
        public void showArry(){
            System.out.println("數組長度: "+stackElem.length);
            System.out.print("全部元素: ");
            for(int i=stackElem.length-1; i>=0; i--)
            {
                System.out.print(stackElem[i]+" ");
            }
            System.out.println();
        }
     
        public static void main(String[] args) throws Exception
        {
            SqStack sqStack=new SqStack(6);
            sqStack.push(3);
            sqStack.push(6);
            sqStack.push(9);
         sqStack.push(1);

System.
out.print("打印輸出: "); sqStack.display(); int top=(int)sqStack.peek(); System.out.println("棧頂: "+top); sqStack.pop(); System.out.print("彈出棧頂,打印輸出: "); sqStack.display(); System.out.println("數組實際情況: "); sqStack.showArry(); } }

 

輸出:

打印輸出: 1 9 6 3
棧頂: 1
彈出棧頂,打印輸出: 9 6 3
數組實際情況:
數組長度: 6
全部元素: null null 1 9 6 3

事實證明:

1.數組的長度初始化后是不變的。

2.棧是通過top記錄下標的方式來控制棧的大小。

3.一旦元素入棧數據就一直存在數組當中,出棧操作僅僅是改變top下標值從而達到控制棧的大小實際元素並沒有從數組中刪除掉

 

 

 

1.棧
    棧相對於開放的數組而言,是訪問受限的
    棧只允許訪問一個數據項,即最后插入的數據項,移除這個數據項后才能訪問倒數第二個數據項
    棧的特點:先進后出


免責聲明!

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



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