數組實現棧的順序存儲功能

 

首先先了解一下棧的特性:
棧:stack,又稱堆棧,它是運算受限的線性表,其限制是僅允許在表的一端進行插入和刪除操作,不允許在其他任何位置進行添加、查找、刪除等操作。

簡單的說:採用該結構的集合,對元素的存取有如下的特點:
1.先進後出(即,存進去的元素,要在後它後面的元素依次取出後,才能取出該元素)。例如,子彈壓進彈夾,先壓進去的子彈在下面,後壓進去的子彈在上面,當開槍時,先彈出上面的子彈,然後才能彈出下面的子彈。
2.棧的入口、出口的都是棧的頂端位置。

因爲棧的操作會有異常的情況存在,所以自定義一個異常,繼承於RuntimeException

/**
 * 自定義當棧爲空時進行操作時的異常
 */
public class StackEmptyException extends RuntimeException{
    public StackEmptyException(String err){
        super(err);
    }
}

先定義一個棧的功能接口,方便操作

/**
 * 定義棧常用功能的接口
 */
public interface Stack {
    //返回棧中的元素個數
    public int getSize();

    //入棧
    public void push(Object obj);

    //出棧
    public Object pop() throws StackEmptyException;

    //去除棧頂元素
    public Object peek() throws StackEmptyException;

    //判斷是否棧爲空
    public boolean isEmpty();

}

運用數組特性實現棧的順序存儲功能

/**
 * 棧的順序存儲實現
 */
public class StackArray implements Stack{
    private final int LEN=10;   //定義棧的默認存儲容量
    private Object[] elements;  //定義數據元素數組
    private int top;    //棧頂指針

    //構造方法初始化數據
    public StackArray() {
        top=-1;                 //此時棧爲空
        elements=new Object[LEN];
    }

    //輔助方法,當棧的容量不夠時進行擴容
    public void escape(){
        Object[] arr=new Object[LEN+10];
        System.arraycopy(elements,0,arr,0,elements.length);
        elements=arr;
    }
    //獲取元素個數
    @Override
    public int getSize() {
        return top+1;
    }

    //入棧
    @Override
    public void push(Object obj) {
        if (getSize()>=elements.length) escape();
        elements[++top]=obj;
    }

    //出棧
    @Override
    public Object pop() throws StackEmptyException {
        if (getSize()<1)
            throw new StackEmptyException("錯誤,棧中沒有元素");
        Object obj=elements[top];
        elements[top--]=null;
        return obj;
    }

    //取棧頂元素
    @Override
    public Object peek() throws StackEmptyException {
        if (getSize()<1)
            throw new StackEmptyException("錯誤,棧爲空");
        Object obj=elements[top];
        return obj;
    }

    //判斷棧是否爲空
    @Override
    public boolean isEmpty() {
        return top==-1;
    }
}

 

發佈了42 篇原創文章 · 獲贊 10 · 訪問量 4917
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章