日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

初始化栈的代码_数据结构中的栈,你知道多少?

發布時間:2025/3/13 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 初始化栈的代码_数据结构中的栈,你知道多少? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于棧比較簡單,也很容易理解,學過的人都知道一句話就可以描述棧的特性:后進先出。所以這篇文章主要是寫如何使用代碼來描述棧,當然也是讓大家很容易理解的語言。還是先給出這篇文章的大致脈絡。


首先,對棧有一個基本認識接下來,用代碼實現棧,以及棧的常用操作然后,介紹棧的幾種應用場景最后,小結一下。

OK,開始。

一、初識棧

棧其實就是一個后進先出的線性表。就好比有很多輛車進了一個死胡同,第一進去的,總是最后一個出來。下面圖來演示一下:

這個圖我是用畫圖工具畫的,所以畫的不好看,還請見諒,但是基本上都能看懂,第一輛進去的車,總是最后一個出去。

有了這個概念,我們再來看一下棧的分類。棧的分類是根據其存儲結構來劃分的。有順序存儲結構和鏈式存儲結構。這個兩種結構也會有相應的代碼實現。

然后就是棧的常用操作:

(1)判斷棧是否為空、是否已滿

(2)入棧、出棧操作

(3)獲取棧頂元素

(4)獲取棧的大小

這里面比較重要的就是入棧和出棧操作了。因此下面先用兩張圖來表示一下,入棧和出棧的操作。首先是入棧

然后就是出棧操作

OK,到這首先總結一下,在第一部分,提到棧的特點:后進先出。然后講有兩個分類,最后給出了常用方法。下面這一部分就開始使用代碼去實現一個棧了。

二、棧的實現

1、順序棧

順序棧是根據順序存儲結構來寫的,底層是由數組來實現的。因此在這里我們不需要定義節點,在這里用java代碼實現順序棧有兩個步驟,

第一:定義棧的接口,接口內部定義了棧的常用操作方法

第二:然后就是接口的實現了。

下面按照這個步驟一步一步來看。

第一步:定義接口

第二步:接口的實現

從上面的操作可以看到,一共實現了4個方法,其中有兩個構造方法和初始化 方法。有一個知識點需要掌握,就是push的時候,先插入再移動。pop的時候,先移動再插入。代碼很簡單。注釋的很清晰。畢竟只有當你有需要的時候,才會去認真看代碼。下面看看鏈式棧

2、鏈式棧

這個鏈式棧就需要你定義節點了,因為鏈式棧的每一個節點要存的信息比較多,比如當前節點的數據值,還有下一個節點的地址,因此實現一個鏈式棧,也需要兩個步驟:

第一:定義節點

第二:根據節點定義棧的接口

第三:實現接口

下面就根據上面的步驟來一步一步實現:

第一步:定義節點

第二步:根據節點定義接口:

第三步:實現棧接口

OK,這個鏈式棧其實和順序棧差不多,稍微麻煩一點,不過這些代碼看起來也比較簡單,比如說我出棧的時候要先判斷當前棧是否為空。入棧 的時候要判斷棧是否已滿。有了對棧的基本操作,我們就可以進入下一階段的學習,也就是棧的使用場景

三、棧的使用場景

1、表達式計算

比如現在有一個表達式1+(4-6*3)/2=2。然后我們使用棧,看看如何去計算他。

第一步:我們需要將這個表達式表示為后綴表達式1463*-2/+。

第二步:使用棧來計算(圖解):碰見數字就入棧,碰見符號先運算。

從上面的例子應該能看懂,只需要掌握一句話:遇見數字就入棧,遇見符號就出棧,然后把結果再入棧。

2、遞歸

我們都知道有一個著名的函數叫斐波那契數列,它是由另外一個著名的例子引出來的


假如說兔子在出生兩個月就有繁殖能力,以后一對兔子每個月能生一對小兔子,假設所有兔子不死,也不考慮近親結婚這些情況,一年后一共有多少只兔子。

我們可以看出,幾個月之后,老兔子可以生小兔子,一開始生的小兔子也可以生小小兔子了,無窮無盡。這個就是一個斐波那契數列。1:1:2:3:5:8:13.。。。。。

當我們使用棧就可以很容易解決這個問題,

代碼就是一個遞歸函數。我可以給出

3、括號匹配

這個問題,說實話自己是最熟悉的,因為我考研究生的時候,機試就有這道題,還在考前狠狠的復習了好幾遍。括號匹配跟表達式求解的形式差不多,但是稍微有一點出入。舉個例子吧

輸入一個字符串 里面只含有 [ , ] , ( , ) 四種括號 ; 現要求判斷這個字符串 是否滿足括號匹配 。如 ([])() 是匹配的 ([)]是不匹配的

給出代碼

四、總結

由于這里主要講解數據結構中的棧,所以就不給出java中的棧了,java中的stack我會在集合專題講解,還請大家支持關注。說到底棧還是比較簡單的,包括隊列,其特點很容易理解,關鍵在于應用和平時的面試題。謝謝。

喜歡的給個關注唄,謝謝

總結

以上是生活随笔為你收集整理的初始化栈的代码_数据结构中的栈,你知道多少?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。