Java棧數據結構的實現方式
棧是Java語言中最重要的數據結構之一,它的實現,至少應該包括以下幾個方法:
- pop() 出棧操作,彈出棧頂元素。
- push(E e) 入棧操作
- peek() 查看棧頂元素
- isEmpty() 棧是否為空
另外,實現一個棧,還應該考慮到幾個問題:
- 棧的初始大小以及棧滿以后如何新增棧空間
- 對棧進行更新時需要進行同步
簡單示例,使用數組實現棧,代碼如下:
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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!