欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Java模擬棧的實(shí)現(xiàn)以及Stack類(lèi)的介紹

 更新時(shí)間:2023年04月23日 10:20:31   作者:會(huì)飛的喵喵  
棧是一種數(shù)據(jù)結(jié)構(gòu),它按照后進(jìn)先出的原則來(lái)存儲(chǔ)和訪問(wèn)數(shù)據(jù)。Stack是一個(gè)類(lèi),表示棧數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。本文就來(lái)和大家介紹一下Java模擬棧的實(shí)現(xiàn)以及Stack類(lèi)的使用,需要的可以參考一下

1.用 Java 模擬棧

1.1 棧是什么

棧是一種數(shù)據(jù)結(jié)構(gòu),它按照后進(jìn)先出的原則來(lái)存儲(chǔ)和訪問(wèn)數(shù)據(jù)。這意味著最后添加到棧中的元素最先被訪問(wèn)和移除,而最先添加到棧中的元素最后被訪問(wèn)和移除。

棧的基本操作包括入棧(push),即將元素添加到棧頂;出棧(pop),即將棧頂元素移除;以及訪問(wèn)棧頂元素(peek)。

1.2 模擬棧

(1)在Java中,Stack 的底層是用數(shù)組來(lái)裝數(shù)據(jù),所以我們這里就用數(shù)組來(lái)模擬。

public class MyStack {

    //裝數(shù)據(jù)
    private int[] data;

    //棧中的數(shù)據(jù)個(gè)數(shù)
    public int useSize;//初始值為0

    
    public MyStack(){
        //初始空間為 10
        data = new int[10];
    }
    
    //返回棧中的元素個(gè)數(shù)
    public int size(){
        return useSize;
    }    
    
}

(2)入棧:當(dāng)空間滿了后擴(kuò)容。

//擴(kuò)容
public void capacity(){
    this.data = Arrays.copyOf(this.data, (int) (1.5 * this.data.length));
}

//判斷是否滿了,
public boolean isFull () {
    return useSize == this.data.length;
}

//入棧,返回插入成功的值
public int push(int val){
    if(isFull()){
        capacity();
    }
    this.data[useSize] = val;
    useSize++;//useSize 始終指向的是棧頂元素的下一個(gè)位置。
    return val;
}

(3)出棧:

//判斷是否為空
public boolean isEmpty() {
    return useSize == 0;
}

//出棧,返回出棧的值
public int pop(){
    if(isEmpty()){
        throw new NullPointerException("???);
    }
    return this.data[--useSize];
}

(4)查看棧頂元素:

//查看棧頂元素
public int peek(){
    if(isEmpty()){
        throw new NullPointerException("棧空");
    }
    return this.data[useSize - 1];
}

1.3 匯總

public class MyStack {

    //裝數(shù)據(jù)
    private int[] data;

    //棧中的數(shù)據(jù)個(gè)數(shù);
    private int useSize;


    public MyStack(){
        //初始空間為 10
        this.data = new int[10];
    }


    //擴(kuò)容
    public void capacity(){
        this.data = Arrays.copyOf(this.data, (int) (1.5 * this.data.length));
    }

    //判斷是否滿了,
    public boolean isFull () {
        return useSize == this.data.length;
    }

    //入棧,返回插入成功的值
    public int push(int val){
        if(isFull()){
            capacity();
        }
        this.data[useSize] = val;
        useSize++;//useSize 始終指向的是棧頂元素的下一個(gè)位置。
        return val;
    }



    //判斷是否為空
    public boolean isEmpty() {
        return useSize == 0;
    }

    //出棧,返回出棧的值
    public int pop(){
        if(isEmpty()){
            throw new NullPointerException("???);
        }
        return this.data[--useSize];
    }


    //查看棧頂元素
    public int peek(){
        if(isEmpty()){
            throw new NullPointerException("棧空");
        }
        return this.data[useSize - 1];
    }

    //返回棧中的元素個(gè)數(shù)
    public int size(){
        return useSize;
    }

}

2.Stack 類(lèi)的介紹

2.1 Stack 的常用方法

Java中,Stack是一個(gè)類(lèi),表示棧數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。它繼承自Vector類(lèi),因此具有Vector類(lèi)的所有方法,并且還提供了堆棧操作的額外方法。Stack類(lèi)實(shí)現(xiàn)了棧數(shù)據(jù)結(jié)構(gòu)的基本操作,包括將元素壓入棧頂、從棧頂彈出元素、查看棧頂元素等。

構(gòu)造方法描述
Stack()創(chuàng)建一個(gè)空堆棧
方法描述
E push(E item)將元素壓入棧頂部
E pop()移除棧頂部的元素并返回該元素
E peek()返回棧頂部的元素而不移除它
int size()獲取棧中有效元素個(gè)數(shù)
boolean empty()測(cè)試棧是否為空
int search(Object o)返回對(duì)象在堆棧中的位置,以 1 為基數(shù)

search(Object o)方法用于查詢棧中給定元素 o 在該棧中出現(xiàn)的位置。若該元素存在于棧中,則返回該元素在棧中的距離棧頂?shù)奈恢?。棧頂位置?1,往下遞增。

public static void main(String[] args) {
    // 創(chuàng)建一個(gè)堆棧
    Stack<String> stack = new Stack<>();

    // 將元素壓入堆棧
    stack.push("Java");
    stack.push("Python");
    stack.push("C++");

    // 查找元素在堆棧中的位置
    int index1 = stack.search("Java");
    int index2 = stack.search("Python");
    int index3 = stack.search("C++");

    // 輸出元素在堆棧中的位置
    System.out.println("Java在堆棧中的位置是:" + index1);
    System.out.println("Python在堆棧中的位置是:" + index2);
    System.out.println("C++在堆棧中的位置是:" + index3);
}

結(jié)果:

到此這篇關(guān)于詳解Java模擬棧的實(shí)現(xiàn)以及Stack類(lèi)的介紹的文章就介紹到這了,更多相關(guān)Java棧與Stack類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot Web應(yīng)用開(kāi)發(fā) CORS 跨域請(qǐng)求支持

    Spring Boot Web應(yīng)用開(kāi)發(fā) CORS 跨域請(qǐng)求支持

    本篇文章主要介紹了Spring Boot Web應(yīng)用開(kāi)發(fā) CORS 跨域請(qǐng)求支持,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 源碼分析Java中ThreadPoolExecutor的底層原理

    源碼分析Java中ThreadPoolExecutor的底層原理

    這篇文章主要帶大家從源碼分析一下Java中ThreadPoolExecutor的底層原理,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下
    2023-05-05
  • Spring中@Conditional注解的用法

    Spring中@Conditional注解的用法

    這篇文章主要介紹了Spring中@Conditional注解的用法,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,滿足條件給容器注冊(cè)bean,需要的朋友可以參考下
    2024-01-01
  • Java MyBatis-Plus之初始MyBatis

    Java MyBatis-Plus之初始MyBatis

    MyBatis-Plus是一個(gè)MyBatis的增強(qiáng)工具,在MyBatis的基礎(chǔ)上只做增強(qiáng)不做修改,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生,本文給大家介紹MyBatis-Plus簡(jiǎn)介和快速入門(mén)教程,需要的朋友參考下吧
    2021-10-10
  • Java命令設(shè)計(jì)模式優(yōu)雅解耦命令和執(zhí)行提高代碼可維護(hù)性

    Java命令設(shè)計(jì)模式優(yōu)雅解耦命令和執(zhí)行提高代碼可維護(hù)性

    本文介紹了Java命令設(shè)計(jì)模式,它將命令請(qǐng)求封裝成對(duì)象,以達(dá)到解耦命令請(qǐng)求和執(zhí)行者的目的,從而提高代碼可維護(hù)性。本文詳細(xì)闡述了該模式的設(shè)計(jì)原則、實(shí)現(xiàn)方法和優(yōu)缺點(diǎn),并提供了實(shí)際應(yīng)用場(chǎng)景和代碼示例,幫助讀者深入理解和應(yīng)用該模式
    2023-04-04
  • 從字節(jié)碼角度解析synchronized和反射實(shí)現(xiàn)原理

    從字節(jié)碼角度解析synchronized和反射實(shí)現(xiàn)原理

    這篇文章主要介紹了從字節(jié)碼角度解析synchronized和反射的實(shí)現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Springboot整合hibernate validator 全局異常處理步驟詳解

    Springboot整合hibernate validator 全局異常處理步驟詳解

    本文分步驟給大家介紹Springboot整合hibernate validator 全局異常處理,補(bǔ)呢文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Java如何取掉json數(shù)據(jù)中值為null的屬性字段

    Java如何取掉json數(shù)據(jù)中值為null的屬性字段

    這篇文章主要介紹了Java如何取掉json數(shù)據(jù)中值為null的屬性字段,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 詳解springboot中使用異步的常用兩種方式及其比較

    詳解springboot中使用異步的常用兩種方式及其比較

    這篇文章主要介紹了詳解springboot中使用異步的常用兩種方式及其比較,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常

    Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常

    這篇文章主要介紹了Spring中的@ControllerAdvice和@ExceptionHandler注解處理全局異常,@ControllerAdvice ,@ControllerAdvice是一個(gè)非常有用的注解,顧名思義,這是一個(gè)增強(qiáng)的 Controller,一般配合@ExceptionHandler使用來(lái)處理全局異常,需要的朋友可以參考下
    2024-01-01

最新評(píng)論