Java棧數據結構的實現方式

jopen 10年前發布 | 17K 次閱讀 數據結構 Java開發

棧是Java語言中最重要的數據結構之一,它的實現,至少應該包括以下幾個方法:

  1. pop() 出棧操作,彈出棧頂元素。
  2. push(E e) 入棧操作
  3. peek() 查看棧頂元素
  4. isEmpty() 棧是否為空

另外,實現一個棧,還應該考慮到幾個問題:

  1. 棧的初始大小以及棧滿以后如何新增棧空間
  2. 對棧進行更新時需要進行同步

簡單示例,使用數組實現棧,代碼如下:

public class Stack<E> {  

    // Java 不支持泛型數組,如需使用,請使用Java提供的容器  
    private Object[] stack;  

    // 棧的默認初始大小  
    private static final int INIT_SIZE = 2;  

    // 棧頂索引  
    private int index;  

    public Stack() {  
        stack = new Object[INIT_SIZE];  
        index = -1;  
    }  

    /**  
     * 構造方法  
     *   
     * @param initSize  
     *            棧的初始大小  
     */ 
    public Stack(int initSize) {  
        if (initSize < 0) {  
            throw new IllegalArgumentException();  
        }  
        stack = new Object[initSize];  
        index = -1;  
    }  

    /**  
     * 出棧操作  
     *   
     * @return 棧頂對象  
     */ 
    public synchronized E pop() {  
        if (!isEmpty()) {  
            E temp = peek();  
            stack[index--] = null;  
            return temp;  
        }  
        return null;  
    }  

    /**  
     * 入棧操作  
     *   
     * @param obj  
     *            等待入棧的對象  
     */ 
    public synchronized void push(E obj) {  
        if (isFull()) {  
            Object[] temp = stack;  
            // 如果棧滿,則創建空間為當前棧空間兩倍的棧  
            stack = new Object[2 * stack.length];  
            System.arraycopy(temp, 0, stack, 0, temp.length);  
        }  
        stack[++index] = obj;  
    }  

    /**  
     * 查看棧頂對象  
     *   
     * @return 棧頂對象  
     */ 
    public E peek() {  
        if (!isEmpty()) {  
            return (E) stack[index];  
        }  
        return null;  
    }  

    /**  
     * 查看棧是否為空  
     *   
     * @return 如果棧為空返回true,否則返回false  
     */ 
    public boolean isEmpty() {  
        return index == -1;  
    }  

    /**  
     * 查看棧是否滿  
     *   
     * @return 如果棧滿返回true,否則返回false  
     */ 
    public boolean isFull() {  
        return index >= stack.length - 1;  
    }  
}

最后說明,Java中實現了棧(java.util.Stack)的數據結構,它是通過繼承Vector類實現的,一般情況下我們直接拿來用就行了。

來源:liuzhenfeng的博客

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!