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

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

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

1.用 Java 模擬棧

1.1 棧是什么

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

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

1.2 模擬棧

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

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 類的介紹

2.1 Stack 的常用方法

Java中,Stack是一個(gè)類,表示棧數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)。它繼承自Vector類,因此具有Vector類的所有方法,并且還提供了堆棧操作的額外方法。Stack類實(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()測試棧是否為空
int search(Object o)返回對象在堆棧中的位置,以 1 為基數(shù)

search(Object o)方法用于查詢棧中給定元素 o 在該棧中出現(xiàn)的位置。若該元素存在于棧中,則返回該元素在棧中的距離棧頂?shù)奈恢谩m斘恢脼?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類的介紹的文章就介紹到這了,更多相關(guān)Java棧與Stack類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

丹阳市| 安塞县| 远安县| 衡东县| 邵阳市| 济南市| 湟源县| 宿州市| 威信县| 惠安县| 邛崃市| 三河市| 威海市| 崇仁县| 赤壁市| 温州市| 随州市| 兴业县| 白水县| 昭苏县| 开原市| 怀远县| 湘西| 沙河市| 淮安市| 崇明县| 文成县| 溧阳市| 阜宁县| 兴化市| 盱眙县| 青冈县| 涞源县| 额敏县| 灌阳县| 博罗县| 太和县| 平顶山市| 青神县| 辰溪县| 常熟市|