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

數(shù)據(jù)結構:棧(Stack)的各種操作(入棧,出棧,判斷棧非空,判斷棧已滿,附源碼)

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結構:棧(Stack)的各種操作(入棧,出棧,判斷棧非空,判斷棧已滿,附源碼)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

數(shù)據(jù)結構:棧(Stack)的各種操作(入棧,出棧,判斷棧非空,判斷棧已滿,附源碼),數(shù)據(jù)結構,數(shù)據(jù)結構,棧,java,原理,實現(xiàn),c++


前言:在前面的文章中,我們講解了順序表,單鏈表,雙向鏈表。而我們今天要分享的棧則是基于之前的數(shù)據(jù)結構上搭建的,但是相較于順序表和鏈表來說,棧的實現(xiàn)就非常簡單了。

目錄

一.棧(Stack)的概念

二.棧的數(shù)據(jù)結構

三.棧的實現(xiàn)

判斷棧已滿

判斷棧非空

入棧push

出棧pop

查看棧頂元素

完整代碼

Java版本

c語言版


一.棧(Stack)的概念

棧是一種先進后出(LIFO)的數(shù)據(jù)結構,在其中元素的的添加(稱為“入棧”)和刪除(稱為“出?!保﹥H在棧的頂部進行。因此,最后一個插入到棧中的元素是第一個從棧中刪除的元素。

它通常有兩個主要操作:

  • push:在棧的頂部插入一個元素。
  • pop:從棧的頂部移除一個元素。

棧的push入棧圖解:

數(shù)據(jù)結構:棧(Stack)的各種操作(入棧,出棧,判斷棧非空,判斷棧已滿,附源碼),數(shù)據(jù)結構,數(shù)據(jù)結構,棧,java,原理,實現(xiàn),c++

棧的pop出棧圖解 :

數(shù)據(jù)結構:棧(Stack)的各種操作(入棧,出棧,判斷棧非空,判斷棧已滿,附源碼),數(shù)據(jù)結構,數(shù)據(jù)結構,棧,java,原理,實現(xiàn),c++

我們可以看見對于棧的操作,我們都是在棧頂上操作的,先進來的元素會被后面的元素覆蓋,而最后一個進來的元素也就是棧頂,因此我們稱為先進后出(LIFO)

像傳統(tǒng)的狙擊步槍的彈夾就屬于是一種棧的結構?

數(shù)據(jù)結構:棧(Stack)的各種操作(入棧,出棧,判斷棧非空,判斷棧已滿,附源碼),數(shù)據(jù)結構,數(shù)據(jù)結構,棧,java,原理,實現(xiàn),c++


二.棧的數(shù)據(jù)結構

對于棧的實現(xiàn),我們通常使用數(shù)組,當然也可以使用鏈表,不過相對而言數(shù)組的實現(xiàn)是更容易的。

而對于一個棧的數(shù)據(jù)結構,他首先得有存放元素的位置,我們這里選擇用數(shù)組來存放,其次還得有棧內(nèi)元素個數(shù)的記錄:

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

三.棧的實現(xiàn)

對于一個棧,他應該有以下這些功能:

  • 入棧
  • 出棧
  • 判斷棧是否為空
  • 判斷棧已滿
  • 查看棧頂元素

判斷棧已滿

當已經(jīng)使用的數(shù)組的大小等于數(shù)組本身的大小的時候,棧就相當于滿了

    public boolean isFull() {
        return usedSize == elem.length;
    }

判斷棧非空

當數(shù)組內(nèi)一個元素都沒有,也就是已經(jīng)使用的數(shù)組大小為0的時候,棧就是空的

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

入棧push

當我們要將元素放入棧內(nèi)的時候,先進行判斷,只有在棧內(nèi)還有剩余空間的情況下,我們才會進行入棧操作,如果沒有剩余空間,我們就進行擴容

數(shù)據(jù)結構:棧(Stack)的各種操作(入棧,出棧,判斷棧非空,判斷棧已滿,附源碼),數(shù)據(jù)結構,數(shù)據(jù)結構,棧,java,原理,實現(xiàn),c++

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

出棧pop

出棧前要先進行判斷,如果棧內(nèi)一個元素都沒有,那自然是不能進行出棧操作的,我們就拋出一個自定義異常然后拋出;對于正常的出棧操作,我們拿出棧頂?shù)脑?,然后讓記錄?shù)組的個數(shù)減一

    public int pop() {
        if (isEmpety()) {
            //棧為空,無法出棧
            throw new EmptyStackException("棧為空,無法彈出");
        }
        int popNumber = elem[usedSize-1];
        usedSize--;
        return popNumber;
    }

查看棧頂元素

和出棧不一樣的是,查看棧頂元素只是將元素拿出來展示,并沒有實際上刪除這個元素

    public int peek() {
        if (isEmpety()) {
            //棧為空,無法出棧
            throw new EmptyStackException("棧為空,無法彈出");
        }
        return elem[usedSize - 1];
    }

完整代碼

棧的整體實現(xiàn)相較于順序表和鏈表是非常簡單的,這里附上完整代碼

Java版本

import java.util.Arrays;

public class MyStack {
    public int[] elem;
    public int usedSize;
    public static int DEFULT_SIZE = 10;
    
    public MyStack() {
        this.elem = new int[DEFULT_SIZE];
    }
    
    public void push(int val) {
        if (isFull()) {
            //擴容
            elem = Arrays.copyOf(elem, elem.length * 2);
        }
        elem[usedSize++] = val;
    }
    
    public int pop() {
        if (isEmpety()) {
            //棧為空,無法出棧
            throw new EmptyStackException("棧為空,無法彈出");
        }
        int popNumber = elem[usedSize-1];
        usedSize--;
        return popNumber;
    }
    
    public int peek() {
        if (isEmpety()) {
            //棧為空,無法出棧
            throw new EmptyStackException("棧為空,無法彈出");
        }
        return elem[usedSize - 1];
    }
    
    public boolean isFull() {
        return usedSize == elem.length;
    }
    
    public boolean isEmpety() {
        return usedSize == 0;
    }

}

c語言版

#include <stdio.h>
#include <stdlib.h>

#define STACK_SIZE 10

// 定義棧結構體
typedef struct {
    int data[STACK_SIZE];  // 存放數(shù)據(jù)的數(shù)組
    int top;               // 棧頂指針
} Stack;

// 初始化棧
void init_stack(Stack *s) {
    s->top = -1;  // 棧頂初始化為-1
}

// 判斷棧是否為空
int is_empty(Stack *s) {
    return s->top == -1;
}

// 判斷棧是否已滿
int is_full(Stack *s) {
    return s->top == STACK_SIZE-1;
}

// 入棧
void push(Stack *s, int value) {
    if (is_full(s)) {
        printf("Stack overflow\n");
        exit(1);
    }
    s->data[++s->top] = value;  // 棧頂指針先加1,再將元素入棧
}

// 出棧
int pop(Stack *s) {
    if (is_empty(s)) {
        printf("Stack underflow\n");
        exit(1);
    }
    return s->data[s->top--];  // 先將元素出棧,再將棧頂指針減1
}

// 獲取棧頂元素
int peek(Stack *s) {
    if (is_empty(s)) {
        printf("Stack underflow\n");
        exit(1);
    }
    return s->data[s->top];
}




?數(shù)據(jù)結構:棧(Stack)的各種操作(入棧,出棧,判斷棧非空,判斷棧已滿,附源碼),數(shù)據(jù)結構,數(shù)據(jù)結構,棧,java,原理,實現(xiàn),c++?本次的分享就到此為止了,希望我的分享能給您帶來幫助,也歡迎大家三連支持,你們的點贊就是博主更新最大的動力!數(shù)據(jù)結構:棧(Stack)的各種操作(入棧,出棧,判斷棧非空,判斷棧已滿,附源碼),數(shù)據(jù)結構,數(shù)據(jù)結構,棧,java,原理,實現(xiàn),c++如有不同意見,歡迎評論區(qū)積極討論交流,讓我們一起學習進步!數(shù)據(jù)結構:棧(Stack)的各種操作(入棧,出棧,判斷棧非空,判斷棧已滿,附源碼),數(shù)據(jù)結構,數(shù)據(jù)結構,棧,java,原理,實現(xiàn),c++有相關問題也可以私信博主,評論區(qū)和私信都會認真查看的,我們下次再見數(shù)據(jù)結構:棧(Stack)的各種操作(入棧,出棧,判斷棧非空,判斷棧已滿,附源碼),數(shù)據(jù)結構,數(shù)據(jù)結構,棧,java,原理,實現(xiàn),c++文章來源地址http://www.zghlxwxcb.cn/news/detail-754320.html

到了這里,關于數(shù)據(jù)結構:棧(Stack)的各種操作(入棧,出棧,判斷棧非空,判斷棧已滿,附源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包