順序棧的基本操作 資料結構 一 棧結構

2021-10-12 06:10:41 字數 2099 閱讀 9274

structure

data

棧/結/構 s/t/a/c/k

前言

在計算機中儲存資料需要用到各種資料結構,一起來了解下棧結構吧。

棧結構介紹

棧結構的宗旨就是先進後出(filo, first in last out),即先進入棧中的元素會在最後才能彈出。棧結構用圖形來表達的話就是這樣:

棧結構的操作

棧的操作有兩個:「壓入」和「彈出」。壓入棧和彈出棧就是對應新增資料和刪除資料,上一節中的棧結構的介紹即是棧的壓入操作。至於為什麼這樣叫呢?相信你看了下面的「彈出」就會理解了。

這個原理就叫做「先進後出」,先進入棧的元素會被壓在最下面,必須等到上面的乙個個元素都彈出了,它才能彈出。

壓入、彈出操作的練習

答案:依先進後出原則,答案應該是:5、4、3、2、1。

假如我們限制入棧順序是5、4、3、2、1,那麼下列哪種不是乙個合法的出棧序列?

a. 45123

b. 34125

c. 52314

d. 12435

大家要知道,棧並不是統一入棧,全部入完後才能出棧,而是入棧出棧的時機都可以是自定義的,只要你想,可以隨時入棧和出棧。

我們來看選項a:

我們知道,入棧順序是5、4、3、2、1,但是a的第乙個彈出是4,那麼就代表我們要在棧頂是4時進行彈出,那麼前兩次入棧大概是這樣:

45123,第乙個要彈出的元素是「4」,所以我們不能繼續入棧了,要將元素「4」彈出,就像這樣:

45123第乙個元素4已經實現,接下來需要彈出的元素是「5」,我們發現棧頂(指在棧的頂部,隨時可能被彈出的元素)正好是5,所以我們先不入棧,直接出棧,像這樣:

滑上去看下選項a的彈出順序,是不是一樣呢?

這樣就說明a選項的彈出順序是可行的,只要按照我們的入棧出棧步驟就行,那麼選項a符合條件。

接下來請大家畫圖並思考b、c、d是否合法,並選出正確答案。

棧結構的基本操作就講到這了,有同學可能就要問了:這種結構限制性這麼強,只能以這種方式進行元素的加入、刪除,它到底有什麼作用呢?敬請聽下回分解(十進位制轉二進位制的運算)。

~ the end ~

單鏈表基本操作 資料結構

鍊錶是一種物理儲存結構上非連續 非順序的資料儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序來形成的。單鏈表分為兩種 帶頭節點和不帶頭結點。在這裡,主要介紹不帶頭結點的單鏈表的基本操作。標頭檔案 slist.h typedef int sdatatype typedef struct slis...

資料結構 順序棧的基本操作

順序棧是指利用順序儲存結構實現的棧,即利用一組位址連續的儲存單元依次存放自棧底到 棧頂的資料元素,同時附設指標top指示棧頂元素在順序棧中的位置。由於c語言中陣列的下標是從0開始的,通常習慣的做法是 以top 1 表示空棧。順序棧的定義如下 define maxsize 100 define ele...

資料結構樹的基本操作 資料結構 樹的基本操作

include include include gtree.h include linklist.h typedefstruct tag gtreenode gtreenode 樹的節點 struct tag gtreenode gtreedata data 節點自身資料 gtreenode par...