国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)】 棧(Stack)與棧的模擬實現(xiàn)

這篇具有很好參考價值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】 棧(Stack)與棧的模擬實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??棧(Stack)

??棧的概念

??棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數(shù)據(jù)插入和刪除操作的一端稱為棧頂,另一端稱為棧底。

棧中的數(shù)據(jù)元素遵守后進先出LIFO(Last In First Out)的原則

  • 壓棧:棧的插入操作叫做進棧/壓棧/入棧,入數(shù)據(jù)在棧頂。

  • 出棧:棧的刪除操作叫做出棧。出數(shù)據(jù)在棧頂。

  • 【數(shù)據(jù)結(jié)構(gòu)】 棧(Stack)與棧的模擬實現(xiàn),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),棧,模擬實現(xiàn),java

比如下面數(shù)據(jù)的出棧與進棧
【數(shù)據(jù)結(jié)構(gòu)】 棧(Stack)與棧的模擬實現(xiàn),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),棧,模擬實現(xiàn),java
就像槍的彈匣一樣,先壓進去的子彈,最后出來
【數(shù)據(jù)結(jié)構(gòu)】 棧(Stack)與棧的模擬實現(xiàn),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),棧,模擬實現(xiàn),java

??棧的使用

在java中,提供了這些方法用于操作棧
【數(shù)據(jù)結(jié)構(gòu)】 棧(Stack)與棧的模擬實現(xiàn),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),棧,模擬實現(xiàn),java
使用如下:

import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Stack<Integer> s = new Stack();
        s.push(1);
        s.push(2);
        s.push(3);
        s.push(4);
        System.out.println(s.size()); // 獲取棧中有效元素個數(shù)---> 4
        System.out.println(s.peek()); // 獲取棧頂元素---> 4
        s.pop(); // 4出棧,棧中剩余1 2 3,棧頂元素為3
        System.out.println(s.pop()); // 3出棧,棧中剩余1 2 棧頂元素為3
        if(s.empty()){
            System.out.println("棧為空");
        }else{
            System.out.println(s.size());
        }
    }
}

?? 棧的模擬實現(xiàn)

從下圖中可以看到,Stack繼承了Vector,Vector和ArrayList類似,都是動態(tài)的順序表,不同的是Vector是線程安全的
【數(shù)據(jù)結(jié)構(gòu)】 棧(Stack)與棧的模擬實現(xiàn),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),棧,模擬實現(xiàn),java
接下來我們模擬實現(xiàn)一個棧

??棧的創(chuàng)建

我們創(chuàng)建一個MyStack的類,用于模擬實現(xiàn)我們的棧

  • 我們的這里的模擬棧用數(shù)組的形式給大家呈現(xiàn)

  • 創(chuàng)建一個int型的elem數(shù)組

  • 再創(chuàng)建一個usedSize的常數(shù),用于記錄棧中元素個數(shù)

  • 【數(shù)據(jù)結(jié)構(gòu)】 棧(Stack)與棧的模擬實現(xiàn),數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),棧,模擬實現(xiàn),java

  • 再給一個構(gòu)造方法,構(gòu)造棧初始的長度

代碼實現(xiàn)如下:

public class MyStack {
    public int[] elem;
    public int usedSize;

    public MyStack() {
        this.elem = new int[10];
    }
}

??棧是否為空

若usedSize為0則為空,所以直接比較返回就好

代碼實現(xiàn)如下

    public boolean isEmpty() {
        return usedSize == 0;
    }

??壓棧

做法如下:

  • 首先對現(xiàn)有棧進行判斷是否為滿,若滿則需要進行擴容
  • 若沒有滿,則只需要將該元素放在數(shù)組elem下標為usedSize的位置
  • 然后usedSize加一即可

代碼實現(xiàn)如下:

    //壓棧
    public void push(int val) {
        if(isFull()) {
            //擴容
            elem = Arrays.copyOf(elem,2*elem.length);
        }
        elem[usedSize++] = val;
    }
    public boolean isFull() {
        return usedSize == elem.length;
    }

??出棧

做法如下:

  • 首先得判斷棧是否為空,若為空我們需要拋出異常
  • 這里我們自定義一個異常為EmptyException如下
public class EmptyException extends RuntimeException{
    public EmptyException() {
    }

    public EmptyException(String message) {
        super(message);
    }
}
  • 若不為空,則usedSize變?yōu)?mark>usedSize-1
  • 然后返回usedSize下標的元素即可

代碼實現(xiàn)如下:

    //出棧
    public int pop() {
        if(isEmpty()) {
            throw new EmptyException("棧是空的!");
        }
        return elem[--usedSize];
    }
    public boolean isEmpty() {
        return usedSize == 0;
    }

??獲取棧頂元素

做法如下:

  • 我們同樣需要對棧進行是否為空的判斷
  • 若為空,拋出我們自定義棧為空的異常EmptyException
  • 若不為空,則返回數(shù)組elem下標為usedSize-1的元素

代碼實現(xiàn)如下:

    public int peek() {
        if(isEmpty()) {
            throw new EmptyException("棧是空的!");
        }
        return elem[usedSize-1];
    }

??MyStack完整代碼實現(xiàn)

import java.util.Arrays;

public class MyStack {
    public int[] elem;
    public int usedSize;

    public MyStack() {
        this.elem = new int[10];
    }
    //壓棧
    public void push(int val) {
        if(isFull()) {
            //擴容
            elem = Arrays.copyOf(elem,2*elem.length);
        }
        elem[usedSize++] = val;
    }
    public boolean isFull() {
        return usedSize == elem.length;
    }
    //出棧
    public int pop() {
        if(isEmpty()) {
            throw new EmptyException("棧是空的!");
        }
        return elem[--usedSize];
    }
    public boolean isEmpty() {
        return usedSize == 0;
    }
    public int peek() {
        if(isEmpty()) {
            throw new EmptyException("棧是空的!");
        }
        return elem[usedSize-1];
    }
}

自定義異常

public class EmptyException extends RuntimeException{
    public EmptyException() {
    }

    public EmptyException(String message) {
        super(message);
    }
}

??概念區(qū)分(棧、虛擬機棧、棧幀)

棧(stack)是只允許在一端進行插入或刪除的線性表,滿足后入先出的特點。

虛擬機棧邏輯結(jié)構(gòu),是具有特殊作用的一塊內(nèi)存空間 。 主管Java程序的運行,它保存方法的局部變量 (8種基本數(shù)據(jù)類型、對象的引用地址)、部分結(jié)果,并參與方法的調(diào)用和返回。

棧幀函數(shù)從調(diào)用過程到結(jié)束的體現(xiàn),一個函數(shù)從調(diào)用到銷毀其中占用的空間,內(nèi)部的局部變量統(tǒng)一放在棧幀中。 每個函數(shù)在運行時,jvm都會創(chuàng)建一個棧幀,然后將棧幀壓入到虛擬機棧中,當函數(shù)調(diào)用結(jié)束時,該函數(shù)對應(yīng)的棧幀會從虛擬機棧中出棧。

?總結(jié)

關(guān)于《 【數(shù)據(jù)結(jié)構(gòu)】 棧(Stack)與棧的模擬實現(xiàn)》就講解到這兒,感謝大家的支持,歡迎各位留言交流以及批評指正,如果文章對您有幫助或者覺得作者寫的還不錯可以點一下關(guān)注,點贊,收藏支持一下!文章來源地址http://www.zghlxwxcb.cn/news/detail-675189.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】 棧(Stack)與棧的模擬實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)---棧的實現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)---棧的實現(xiàn)

    前言 一、什么是棧? 二、 棧的實現(xiàn) 1. 棧的結(jié)構(gòu) 2. 棧的接口實現(xiàn)過程 總結(jié) 棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入?;驂簵?,它是

    2024年02月02日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)-棧的實現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)-棧的實現(xiàn)

    棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數(shù)據(jù)插入和刪除操作的 一端稱為棧頂,另一端稱為棧底 。棧中的數(shù)據(jù)元素遵守后進先出LIFO(Last In First Out)的原則。 壓棧:棧的插入操作叫做進棧/壓棧/入棧, 入數(shù)據(jù)在棧頂。 出棧:棧的刪除操

    2024年02月05日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)】棧的實現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】棧的實現(xiàn)

    棧:是一種受限制的線性表,即只能在尾部進行插入、刪除的線性表,而且是一種先進后出的數(shù)據(jù)結(jié)構(gòu)。尾部這一端又叫做棧頂,另一端叫做棧底。 入棧:向一個棧內(nèi)插入元素叫做入?;驂簵#研略胤诺綏m斣氐纳厦?,是它成為新的棧頂元素。 出棧:在棧內(nèi)刪除元

    2024年02月01日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu):棧的實現(xiàn)(C實現(xiàn))

    數(shù)據(jù)結(jié)構(gòu):棧的實現(xiàn)(C實現(xiàn))

    個人主頁 : 個人主頁 個人專欄 : 《數(shù)據(jù)結(jié)構(gòu)》 《C語言》 棧:一種特殊的線性結(jié)構(gòu),其只允許在一端進行插入,刪除數(shù)據(jù)。允許操作數(shù)據(jù)的一端被稱為 棧頂 ,另一端被稱為 棧底 。 本篇博客將要實現(xiàn)的是 數(shù)組棧 。 對于棧的特殊性,用數(shù)組(在數(shù)組尾部插入刪除數(shù)據(jù)) 和

    2024年02月13日
    瀏覽(37)
  • 【數(shù)據(jù)結(jié)構(gòu)—棧的實現(xiàn)(數(shù)組棧)】

    【數(shù)據(jù)結(jié)構(gòu)—棧的實現(xiàn)(數(shù)組棧)】

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言 一、棧 1.1棧的概念及結(jié)構(gòu) 二、棧的實現(xiàn) 2.1頭文件的實現(xiàn)—Stack.h 2.2源文件的實現(xiàn)—Stack.c 2.3源文件的測試—test.c 三、棧的實際測試數(shù)據(jù)展示 3.1正常的出入棧展示: 3.2進棧同時也在出棧的

    2024年02月04日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu):線性表(棧的實現(xiàn))

    數(shù)據(jù)結(jié)構(gòu):線性表(棧的實現(xiàn))

    棧(Stack)是只允許在一端進行插入或刪除操作的線性表.首先棧是一種線性表,但限定這種線性表只能在某一端進行插入和刪除操作. 進行 數(shù)據(jù)插入和刪除操作的一端 叫 棧頂 ,另一端稱為 棧底 . 棧中的元素遵循 后進先出 LIFO(Last In First Out)的原則 壓棧 :棧的插入操作叫做進棧/壓棧

    2024年02月09日
    瀏覽(20)
  • 【數(shù)據(jù)結(jié)構(gòu)】棧的實現(xiàn)(C語言)

    【數(shù)據(jù)結(jié)構(gòu)】棧的實現(xiàn)(C語言)

    文章目錄 1.棧 1.1 棧的定義 1.2 C語言實現(xiàn)棧 1.2.1接口函數(shù) 1.2.2棧的創(chuàng)建 1.2.3棧的初始化? 1.2.4棧的銷毀 1.2.5壓棧 1.2.6出棧 1.2.7判斷棧是否為空 1.2.8取棧頂元素 1.2.9?棧有多少個數(shù)據(jù) ?1.3 C語言實現(xiàn)棧的具體代碼 頭文件stack.h 接口函數(shù)stack.c 測試函數(shù)test.c ? ? ? ? 棧(stack)又名堆

    2024年02月05日
    瀏覽(21)
  • 【算法與數(shù)據(jù)結(jié)構(gòu)】棧的實現(xiàn)詳解

    【算法與數(shù)據(jù)結(jié)構(gòu)】棧的實現(xiàn)詳解

    棧的概念: 棧 :一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數(shù)據(jù)插入和刪除操作的一端 稱為棧頂,另一端稱為棧底。棧中的數(shù)據(jù)元素遵守后進先出LIFO(Last In First Out)的原則。 壓棧:棧的插入操作叫做進棧/壓棧/入棧,入數(shù)據(jù)在棧頂。 出棧:

    2024年03月11日
    瀏覽(46)
  • 數(shù)據(jù)結(jié)構(gòu)之棧的實現(xiàn)(附源碼)

    數(shù)據(jù)結(jié)構(gòu)之棧的實現(xiàn)(附源碼)

    目錄 一、棧的概念及結(jié)構(gòu) ?二、棧的實現(xiàn) 三、初學(xué)棧的練習題 棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數(shù)據(jù)插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的數(shù)據(jù)元素遵守后進先出LIFO(Last In First Out)的原則。 壓棧:棧的插

    2024年02月07日
    瀏覽(24)
  • 數(shù)據(jù)結(jié)構(gòu)-棧的實現(xiàn)(C語言版)

    數(shù)據(jù)結(jié)構(gòu)-棧的實現(xiàn)(C語言版)

    前言 ? ? ? ? 棧是一種特殊的線性表,只允許在固定的一端進行插入和刪除的操作, 進行數(shù)據(jù)插入和刪除的一端叫做棧頂,另一端叫做棧底。? 棧中的數(shù)據(jù)元素遵循后進先出的的原則。 目錄 1.壓棧和出棧 2.?棧的實現(xiàn) 3.測試代碼 ? ? ? ? 壓棧:棧的插入操作叫?壓棧,入數(shù)

    2024年02月13日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包