最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1.用 Java 模擬棧

1.1 棧是什么

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

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

1.2 模擬棧

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

public class MyStack {

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

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

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

(2)入棧:當空間滿了后擴容。

//擴容
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 始終指向的是棧頂元素的下一個位置。
    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ù)個數(shù);
    private int useSize;


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


    //擴容
    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 始終指向的是棧頂元素的下一個位置。
        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];
    }

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

}

2.Stack 類的介紹

2.1 Stack 的常用方法

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

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

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

public static void main(String[] args) {
    // 創(chuàng)建一個堆棧
    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模擬棧的實現(xiàn)以及Stack類的介紹的文章就介紹到這了,更多相關(guān)Java棧與Stack類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA一個快速排序?qū)崿F(xiàn)代碼

    JAVA一個快速排序?qū)崿F(xiàn)代碼

    排序有哪幾種方法?請列舉。并用JAVA實現(xiàn)一個快速排序.,需要的朋友可以參考下
    2017-02-02
  • Java集合中的TreeMap解讀

    Java集合中的TreeMap解讀

    這篇文章主要介紹了Java集合中的TreeMap解讀,TreeMap可以傳入一個實現(xiàn)了 Comparator接口的一個匿名內(nèi)部類,匿名內(nèi)部類里面我們?nèi)匀豢梢匀ブ付ㄌ砑游覀兊逆I值對的這種排序規(guī)則,需要的朋友可以參考下
    2023-09-09
  • Java Spring循環(huán)依賴原理與bean的生命周期圖文案例詳解

    Java Spring循環(huán)依賴原理與bean的生命周期圖文案例詳解

    這篇文章主要介紹了Spring循環(huán)依賴原理與bean的生命周期圖文案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 解析Java的JNI編程中的對象引用與內(nèi)存泄漏問題

    解析Java的JNI編程中的對象引用與內(nèi)存泄漏問題

    這篇文章主要介紹了Java的JNI編程中的對象引用與內(nèi)存泄漏問題,重點講述了局部和全局引用時一些值得注意的地方,需要的朋友可以參考下
    2015-11-11
  • SpringBoot中@KafkaListener使用${}動態(tài)指定topic問題

    SpringBoot中@KafkaListener使用${}動態(tài)指定topic問題

    在SpringKafka中,使用${}引用Spring屬性配置,可以在不同環(huán)境中重新配置topic名稱,而無需修改代碼,在application.properties或application.yml中定義topic名稱,并在代碼中使用${}引用
    2024-12-12
  • SpringMVC整合kinfe4j及問題解決分析

    SpringMVC整合kinfe4j及問題解決分析

    這篇文章主要為大家介紹了SpringMVC整合kinfe4j及問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • java算法導(dǎo)論之FloydWarshall算法實現(xiàn)代碼

    java算法導(dǎo)論之FloydWarshall算法實現(xiàn)代碼

    這篇文章主要介紹了算法導(dǎo)論之FloydWarshall算法實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Spring Bean創(chuàng)建和循環(huán)依賴

    Spring Bean創(chuàng)建和循環(huán)依賴

    這篇文章主要介紹了Spring Bean創(chuàng)建和循環(huán)依賴,講述了Spring容器中?Bean?的創(chuàng)建過程已經(jīng)主要的方法,另外也著重分析了循環(huán)依賴的問題,需要的小伙伴可以參考一下
    2022-05-05
  • springboot整合sa-token中的redis報netty錯誤問題

    springboot整合sa-token中的redis報netty錯誤問題

    整合Spring Boot與sa-token-redis-jackson時遇到Netty版本沖突,通過將netty-common升級到與sa-token-redis-jackson兼容的版本4.1.79解決
    2024-11-11
  • nacos將服務(wù)注冊到不同的命名空間下問題

    nacos將服務(wù)注冊到不同的命名空間下問題

    Nacos是SpringCloudAlibaba架構(gòu)中最重要的組件,提供注冊中心、配置中心和動態(tài)DNS服務(wù)三大功能,如果需要配置多個數(shù)據(jù)庫適配的環(huán)境,啟動服務(wù)時需要將服務(wù)注冊到不同的命名空間下,并配置新部署的網(wǎng)關(guān)服務(wù)ip和端口或者域名
    2024-12-12

最新評論

厦门市| 靖远县| 阳曲县| 嫩江县| 麦盖提县| 崇义县| 侯马市| 蒙阴县| 诸城市| 微博| 绍兴市| 安多县| 保靖县| 伊宁市| 抚州市| 安泽县| 黑河市| 桦南县| 普兰店市| 江山市| 三都| 陵川县| 若羌县| 修武县| 延吉市| 安宁市| 丹巴县| 大丰市| 彰武县| 三亚市| 申扎县| 康定县| 右玉县| 永安市| 普定县| 麦盖提县| 甘南县| 棋牌| 喜德县| 安图县| 玉门市|