java數據構造之java完成棧。本站提示廣大學習愛好者:(java數據構造之java完成棧)文章只能為提供參考,不一定能成為您想要的結果。以下是java數據構造之java完成棧正文
import java.util.Arrays;
/**
* 棧的完成<br>
* @author Skip
* @version 1.0
*/
public class Stack<T> {
private int size; //棧中元素的個數
private Object[] arr; //底層數組
private final int defaultLength = 200; //默許長度
/**
* 無參結構,應用默許長度初始化數組
*/
public Stack(){
arr = new Object[defaultLength];
size = 0;
}
/**
* 應用長度參數初始化數組
* @param length 長度
*/
public Stack(int length){
arr = new Object[length];
size = 0;
}
/**
* 入棧
* @param element 數據
*/
public void push(T element){
//能否須要擴容
if(size >= arr.length){
//數組擴容
extendCapacity(size+1);
}
arr[size++] = element;
}
/**
* 出棧
* @return 數據
*/
@SuppressWarnings("unchecked")
public T pop(){
//元素個數為0,沒法履行出棧操作
if(size==0){
return null;
}
T t = (T)arr[size-1];
arr[--size] = null; //數據已出棧,復原為null
return t;
}
/**
* 清空棧
*/
public void clear(){
for(int i=0;i<size;i++){
arr[i]=null;
}
size = 0;
}
/**
* 取得以後棧中元素的個數
* @return 元素的個數
*/
public int getSize(){
return size;
}
/**
* 斷定能否為空棧
* @return 空為true,非空為false
*/
public boolean isEmpty(){
return size == 0;
}
/**
* 打印棧中一切的元素
*/
@SuppressWarnings("unchecked")
public void printStack(){
for(int i=0;i<size;i++){
System.out.print(((T)arr[i]).toString());
}
System.out.println();
}
/**
* 擴容
* @param length 須要的長度
*/
private void extendCapacity(int length){
//以後數組長度和須要的長度取最年夜
int minCapacity = Math.max(arr.length, length);
//斷定能否須要擴容
if(minCapacity - arr.length>0){
//數組長度增長一半
int newLength = arr.length + arr.length/2;
//假如新的長度還比需求要小,將需求的長度作為數組長度
if(newLength < minCapacity){
newLength=minCapacity;
}
//數組長度不克不及跨越Integer.Max_Value
if(newLength > Integer.MAX_VALUE - 8){
newLength = Integer.MAX_VALUE;
}
//數組擴容
arr = Arrays.copyOf(arr, newLength);
}
}
}