java數(shù)據(jù)結(jié)構(gòu)之java實(shí)現(xiàn)棧
import java.util.Arrays;
/**
* 棧的實(shí)現(xiàn)<br>
* @author Skip
* @version 1.0
*/
public class Stack<T> {
private int size; //棧中元素的個(gè)數(shù)
private Object[] arr; //底層數(shù)組
private final int defaultLength = 200; //默認(rèn)長(zhǎng)度
/**
* 無參構(gòu)造,使用默認(rèn)長(zhǎng)度初始化數(shù)組
*/
public Stack(){
arr = new Object[defaultLength];
size = 0;
}
/**
* 使用長(zhǎng)度參數(shù)初始化數(shù)組
* @param length 長(zhǎng)度
*/
public Stack(int length){
arr = new Object[length];
size = 0;
}
/**
* 入棧
* @param element 數(shù)據(jù)
*/
public void push(T element){
//是否需要擴(kuò)容
if(size >= arr.length){
//數(shù)組擴(kuò)容
extendCapacity(size+1);
}
arr[size++] = element;
}
/**
* 出棧
* @return 數(shù)據(jù)
*/
@SuppressWarnings("unchecked")
public T pop(){
//元素個(gè)數(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)前棧中元素的個(gè)數(shù)
* @return 元素的個(gè)數(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();
}
/**
* 擴(kuò)容
* @param length 需要的長(zhǎng)度
*/
private void extendCapacity(int length){
//當(dāng)前數(shù)組長(zhǎng)度和需要的長(zhǎng)度取最大
int minCapacity = Math.max(arr.length, length);
//判斷是否需要擴(kuò)容
if(minCapacity - arr.length>0){
//數(shù)組長(zhǎng)度增加一半
int newLength = arr.length + arr.length/2;
//如果新的長(zhǎng)度還比需求要小,將需求的長(zhǎng)度作為數(shù)組長(zhǎng)度
if(newLength < minCapacity){
newLength=minCapacity;
}
//數(shù)組長(zhǎng)度不能超過Integer.Max_Value
if(newLength > Integer.MAX_VALUE - 8){
newLength = Integer.MAX_VALUE;
}
//數(shù)組擴(kuò)容
arr = Arrays.copyOf(arr, newLength);
}
}
}
- java 數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列
- java 數(shù)據(jù)結(jié)構(gòu)中棧結(jié)構(gòu)應(yīng)用的兩個(gè)實(shí)例
- Java模擬棧和隊(duì)列數(shù)據(jù)結(jié)構(gòu)的基本示例講解
- 用Java代碼實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)的基本方法歸納
- Java中使用數(shù)組實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)實(shí)例
- Java語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)棧代碼詳解
相關(guān)文章
Java開發(fā)中POJO和JSON互轉(zhuǎn)時(shí)如何忽略隱藏字段的問題
這篇文章主要介紹了Java開發(fā)中POJO和JSON互轉(zhuǎn)時(shí)如何忽略隱藏字段的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
springboot中如何使用openfeign進(jìn)行接口調(diào)用
這篇文章主要介紹了springboot中如何使用openfeign進(jìn)行接口調(diào)用問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
idea使用war以及war exploded的區(qū)別說明
本文詳細(xì)解析了war與warexploded兩種部署方式的差異及步驟,war方式是先打包成war包,再部署到服務(wù)器上;warexploded方式是直接把文件夾、class文件等移到Tomcat上部署,支持熱部署,開發(fā)時(shí)常用,文章分別列出了warexploded模式和war包形式的具體操作步驟2024-10-10
Idea使用插件實(shí)現(xiàn)逆向工程搭建SpringBoot項(xiàng)目的圖文教程
這篇文章主要介紹了Idea使用插件實(shí)現(xiàn)逆向工程搭建SpringBoot項(xiàng)目,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
java的MybatisPlus調(diào)用儲(chǔ)存過程的返回?cái)?shù)據(jù)問題
這篇文章主要介紹了java的MybatisPlus調(diào)用儲(chǔ)存過程的返回?cái)?shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
詳解IDEA下Gradle多模塊(項(xiàng)目)的構(gòu)建
這篇文章主要介紹了詳解IDEA下Gradle多模塊(項(xiàng)目)的構(gòu)建,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01

