資料結構_順序棧的java實現
阿新 • • 發佈:2019-02-14
棧的特點
- 棧(stack)在電腦科學中是限定僅在表尾進行插入或刪除操作的線形表。
棧是一種資料結構,它按照先進後出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後一個數據被第一個讀出來)。 - 棧是隻能在某一端插入和刪除的特殊線性表。用桶堆積物品,先堆進來的壓在底下,隨後一件一件往堆。取走時,只能從上面一件一件取。堆和取都在頂部進行,底部一般是不動的。
- 棧就是一種類似桶堆積物品的資料結構,進行刪除和插入的一端稱棧頂,另一堆稱棧底。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。 棧也稱為後進先出表(LIFO表)。
順序棧的特點
- 因為物理結構和邏輯結構均連續
- 順序儲存要求明確資料的規模用來分配資料空間
- 節省空間
順序棧的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();
}
}