java數(shù)據(jù)結(jié)構(gòu)之java實現(xiàn)棧
import java.util.Arrays;
/**
* 棧的實現(xiàn)<br>
* @author Skip
* @version 1.0
*/
public class Stack<T> {
private int size; //棧中元素的個數(shù)
private Object[] arr; //底層數(shù)組
private final int defaultLength = 200; //默認(rèn)長度
/**
* 無參構(gòu)造,使用默認(rèn)長度初始化數(shù)組
*/
public Stack(){
arr = new Object[defaultLength];
size = 0;
}
/**
* 使用長度參數(shù)初始化數(shù)組
* @param length 長度
*/
public Stack(int length){
arr = new Object[length];
size = 0;
}
/**
* 入棧
* @param element 數(shù)據(jù)
*/
public void push(T element){
//是否需要擴容
if(size >= arr.length){
//數(shù)組擴容
extendCapacity(size+1);
}
arr[size++] = element;
}
/**
* 出棧
* @return 數(shù)據(jù)
*/
@SuppressWarnings("unchecked")
public T pop(){
//元素個數(shù)為0,無法執(zhí)行出棧操作
if(size==0){
return null;
}
T t = (T)arr[size-1];
arr[--size] = null; //數(shù)據(jù)已出棧,還原為null
return t;
}
/**
* 清空棧
*/
public void clear(){
for(int i=0;i<size;i++){
arr[i]=null;
}
size = 0;
}
/**
* 獲得當(dāng)前棧中元素的個數(shù)
* @return 元素的個數(shù)
*/
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){
//當(dāng)前數(shù)組長度和需要的長度取最大
int minCapacity = Math.max(arr.length, length);
//判斷是否需要擴容
if(minCapacity - arr.length>0){
//數(shù)組長度增加一半
int newLength = arr.length + arr.length/2;
//如果新的長度還比需求要小,將需求的長度作為數(shù)組長度
if(newLength < minCapacity){
newLength=minCapacity;
}
//數(shù)組長度不能超過Integer.Max_Value
if(newLength > Integer.MAX_VALUE - 8){
newLength = Integer.MAX_VALUE;
}
//數(shù)組擴容
arr = Arrays.copyOf(arr, newLength);
}
}
}
相關(guān)文章
淺談spring中用到的設(shè)計模式及應(yīng)用場景
下面小編就為大家?guī)硪黄獪\談spring中用到的設(shè)計模式及應(yīng)用場景。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08Java中對AtomicInteger和int值在多線程下遞增操作的測試
這篇文章主要介紹了Java中對AtomicInteger和int值在多線程下遞增操作的測試,本文得出AtomicInteger操作 與 int操作的效率大致相差在50-80倍上下的結(jié)論,需要的朋友可以參考下2014-09-09spring Retryable注解實現(xiàn)重試詳解
這篇文章主要介紹了spring Retryable注解實現(xiàn)重試詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Java調(diào)用JavaScript實現(xiàn)字符串計算器代碼示例
這篇文章主要介紹了Java調(diào)用JavaScript實現(xiàn)字符串計算器代碼示例,具有一定參考價值,需要的朋友可以了解下。2017-12-12劍指Offer之Java算法習(xí)題精講鏈表與數(shù)組專項訓(xùn)練
跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化2022-03-03