1. 程式人生 > 程式設計 >JAVA基於靜態陣列實現棧的基本原理與用法詳解

JAVA基於靜態陣列實現棧的基本原理與用法詳解

本文例項講述了JAVA基於靜態陣列實現棧。分享給大家供大家參考,具體如下:

1.棧的定義

棧是一種“先進後出”的一種線性資料結構,有壓棧出棧兩種操作方式。如下圖:

JAVA基於靜態陣列實現棧的基本原理與用法詳解

2.棧的分類

棧主要分為兩類:

  • 靜態棧
  • 動態棧

【靜態棧】

靜態棧的核心是陣列,類似於一個連續記憶體的陣列,我們只能操作其棧頂元素。

【動態棧】

靜態棧的核心是陣列,類似於一個連續記憶體的陣列,我們只能操作其棧頂節點。

JAVA基於靜態陣列實現棧的基本原理與用法詳解

此節我們在我們之前封裝的動態陣列的基礎上(引用封裝好的動態陣列),實現基本的棧操作。

3.棧實現

1.先定義一個介面Stack包括相關棧的基本操作

package Stack;

public interface Stack<E> {

  //棧中元素個數
  int getSize();

  //棧中元素個數是否為空
  boolean isEmpty();

  //進棧
  void push(E e);

  //出棧
  E pop();

  //檢視棧頂元素
  E peek();
}

2.建立一個ArrayStack類實現介面

package Stack;

import Array.DynamicArray;

public class ArrayStack<E> implements Stack<E> {
  DynamicArray<E> array;

  //建構函式,傳入棧的容量capacity建構函式
  public ArrayStack(int capacity) {
    array = new DynamicArray<E>(capacity);
  }

  //無參建構函式,預設棧的容量capacity=10
  public ArrayStack() {
    array = new DynamicArray<E>();
  }

  //獲取棧中元素個數
  @Override
  public int getSize() {
    return array.getSize();
  }

  //獲取棧中元素資料是否為空
  @Override
  public boolean isEmpty() {
    return array.isEmpty();
  }

  //獲取棧的容量
  public int getCapacity() {
    return array.getCapacity();
  }

  //進棧操作
  @Override
  public void push(E e) {
    array.addLast(e);
  }

  //出棧操作
  @Override
  public E pop() {
    return array.removeLast();
  }

  //檢視棧頂元素
  @Override
  public E peek() {
    return array.getLast();
  }

  //重寫object類的toString方法
  @Override
  public String toString() {
    StringBuilder res = new StringBuilder();
    res.append("Stack:");
    res.append('[');
    for (int i = 0; i < array.getSize(); i++) {
      res.append(array.get(i));
      if (i != array.getSize() - 1) {
        res.append(",");
      }
    }
    res.append("] top");//體現右側為棧頂
    return res.toString();
  }

}

3.測試棧操作是否正確

新建一個類,包含main函式

(1)進棧操作

package Stack;

public class TestMain {
  public static void main(String[] args) {
    ArrayStack<Integer> stack = new ArrayStack<Integer>();
    for (int i = 0; i < 5; i++) {
      stack.push(i);
      System.out.println(stack);
    }
   
  }

}

結果為:

JAVA基於靜態陣列實現棧的基本原理與用法詳解

(2)出棧操作

 System.out.println("出棧");
 stack.pop();
 System.out.println(stack);

結果為:

JAVA基於靜態陣列實現棧的基本原理與用法詳解

4.棧的複雜度分析

有了我們關於動態陣列複雜度分析的知識,在加上此處的棧是基於動態陣列實現的,複雜度的分析方式是一致的。

JAVA基於靜態陣列實現棧的基本原理與用法詳解

GitHub原始碼地址https://github.com/FelixBin/dataStructure/tree/master/out/test/structure/Stack

更多關於java演算法相關內容感興趣的讀者可檢視本站專題:《Java資料結構與演算法教程》、《Java操作DOM節點技巧總結》、《Java檔案與目錄操作技巧彙總》和《Java快取操作技巧彙總》

希望本文所述對大家java程式設計有所幫助。