1. 程式人生 > >資料結構_順序棧的java實現

資料結構_順序棧的java實現

棧的特點

  • 棧(stack)在電腦科學中是限定僅在表尾進行插入或刪除操作的線形表。
    棧是一種資料結構,它按照先進後出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後一個數據被第一個讀出來)。
  • 棧是隻能在某一端插入和刪除的特殊線性表。用桶堆積物品,先堆進來的壓在底下,隨後一件一件往堆。取走時,只能從上面一件一件取。堆和取都在頂部進行,底部一般是不動的。
  • 棧就是一種類似桶堆積物品的資料結構,進行刪除和插入的一端稱棧頂,另一堆稱棧底。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。 棧也稱為後進先出表(LIFO表)。

順序棧的特點

  1. 因為物理結構和邏輯結構均連續
  2. 順序儲存要求明確資料的規模用來分配資料空間
  3. 節省空間

順序棧的java實現

package stack;
/**
 * ================================資料結構說明:========================================
 * 
 * 名稱:順序棧
 * 
 * 特徵:
 *      1. 因為物理結構和邏輯結構均連續
 *      3. 順序儲存要求明確資料的規模用來分配資料空間
 *      4. 節省空間
 * 
 * 主要方法:
 *      1. init:初始化順序表
 *      2. destroy:銷燬棧
 *      3. clear:清空棧中的元素
 *      4. length:獲取資料表長度
 *      5. getTop: 獲取棧頂元素
 *      6. pop: 退棧操作
 *      7. isEmpty:判斷順序棧是否為空
 *      8. print:列印順序棧中的元素
 * 
 * ======================================================================================
 */
/** * @author 葉清逸 * @date 2018年7月31日上午11:23:26 * @version 1.0 * @project stack */ public class SeqStack implements Stack{ //初始化最大容量 final int MAXSIZE = 100 ; //資料域 Object [] Element = null ; //棧頂指標 int top ; /** * @see stack.Stack#init() * @explain init方法:初始化棧 * @throws
* @author 葉清逸 * @date 2018年7月31日 上午11:55:21 */
@Override public void init() { /*初始化資料域*/ Element = new Object[MAXSIZE] ; /*初始化指標*/ top = -1 ; } /** * @see stack.Stack#destroy() * @explain destroy方法:銷燬棧 * @throws * @author 葉清逸 * @date 2018年7月31日 下午12:01:06 */ @Override public void destroy() { /*若棧未初始化列印錯誤資訊*/ if(Element == null){ System.out.println("錯誤!棧未初始化"); return ; } Element = null ; top = -1 ; } /** * @see stack.Stack#clear() * @explain clear方法: 清空棧 * @throws * @author 葉清逸 * @date 2018年7月31日 下午12:01:40 */ @Override public void clear() { /*若棧未初始化列印錯誤資訊*/ if(Element == null){ System.out.println("錯誤!棧未初始化"); return ; } /*將所有節點製為空*/ for(int i=0 ; i<top ; i++){ Element[i] = null ; } /*指標製為初始狀態*/ top = -1 ; } /** * @see stack.Stack#isEmpty() * @explain isEmpty方法: 判斷棧是否為空 * @return 若為空返回true,否則返回false * @throws * @author 葉清逸 * @date 2018年7月31日 下午12:04:02 */ @Override public boolean isEmpty() { if(top == -1) return true ; else return false; } /** * @see stack.Stack#length() * @explain length方法: 獲取棧的長度 * @return 棧的長度 * @throws * @author 葉清逸 * @date 2018年7月31日 下午12:06:38 */ @Override public int length() { /*若棧未初始化列印錯誤資訊*/ if(Element == null){ System.out.println("錯誤!棧未初始化"); return -1; } return top+1; } /** * @see stack.Stack#getTop() * @explain getTop方法: 獲取棧頂元素 * @return 返回棧頂元素 * @throws * @author 葉清逸 * @date 2018年7月31日 下午12:07:32 */ @Override public Object getTop() { /*若棧未初始化列印錯誤資訊*/ if(Element == null){ System.out.println("錯誤!棧未初始化"); return null; } return Element[top]; } /** * @see stack.Stack#push(java.lang.Object) * @explain push方法: 將元素壓進棧 * @param elem 要進棧的元素 * @throws * @author 葉清逸 * @date 2018年7月31日 下午12:09:49 */ @Override public void push(Object elem) { /*若棧未初始化列印錯誤資訊*/ if(Element == null){ System.out.println("錯誤!棧未初始化"); return ; } /*將元素壓進棧*/ Element[top+1] = elem ; /*指標+1*/ top++ ; } /** * @see stack.Stack#pop() * @explain pop方法: 元素退棧 * @return 已退棧的元素 * @throws * @author 葉清逸 * @date 2018年7月31日 下午12:12:24 */ @Override public Object pop() { /*若棧未初始化列印錯誤資訊*/ if(Element == null){ System.out.println("錯誤!棧未初始化"); return null; } /*複製棧頂元素*/ Object elem = Element[top] ; /*當前指標所指域製為空*/ Element[top] = null ; /*指標-1*/ top-- ; return elem ; } /** * @see stack.Stack#print() * @explain print方法: 由棧底向棧頂列印元素 * @throws * @author 葉清逸 * @date 2018年7月31日 下午12:14:45 */ @Override public void print() { /*迴圈遍歷資料域,列印*/ for(int i=0 ; i<=top ; i++){ System.out.print(Element[i]+" "); } System.out.println(); } }