1. 程式人生 > 實用技巧 >05-java實現棧

05-java實現棧

05-java實現棧

本人git https://github.com/bigeyes-debug/Algorithm

一丶棧

  • 棧是特殊的線性表,只能在一段操作
  • 新增元素push,入棧
  • 刪除元素pop,出棧
  • 動態陣列和雙向連結串列都可以實現
  • 在棧頂進行操作

二丶棧的介面設計

public class Stack<E> {
    // 使用動態陣列實現棧
    private List<E> list = new ArrayList<>();
    // 元素的數量
    public int size();
    // 是否為空
    public boolean isEmpty();
    // 入棧
    public void push(E element);
    // 出棧
    public E pop();
    // 獲取棧頂元素
    public E top();
}

三丶棧的實現

  • 我們在動態陣列中實現了很多介面,動態陣列和棧的結構類似,很多方法我們可以複用
  • 我們採用組合的方式,將動態陣列注入,
  • 我們也可以採取繼承的方式,但是繼承會導致一些不需要的介面對外暴露,所以我們還是選擇了組合的方式
  • list.get().這個介面我們就沒必要對外暴露
public class Stack<E> {
    // 使用 動態陣列儲存陣列
    private ArrayList<E> list;
    public Stack() {
        // 初始化方法中建立列表
    	this.list = new ArrayList<>();
    }
    public int size() {
    	// 棧中元素數量, 就是列表中儲存的元素數量
    	return list.size();
    }
    public boolean isEmpty() {
    	// 棧是否空, 就是列表是否空
    	return list.isEmpty();
    }
    public void push(E element) {
    	// 入棧, 將元素新增到列表的最後面
    	list.add(element);
    }
    public E pop() {
    	// 出棧, 將列表中最後一個元素刪除並返回
    	return list.remove(list.size() - 1);
    }
    public E top() {
    	// 檢視棧頂元素, 就是檢視列表中的最後一個元素
    	return list.get(list.size() - 1);
    }
    public void clear() {
    	// 清空棧, 就是清空列表
    	list.clear();
    }
}