用小白的眼光理解資料結構 棧

2021-10-04 01:17:01 字數 2390 閱讀 8037

前言:

是一種資料結構,作為剛學程式設計的我來說,看著複雜的**和解釋,真是乙個頭兩個大,為了方便大家理解,我用最簡單的思維抽象了一下棧這種資料結構。因為我剛學程式設計,內容不準確請見諒。

以下內容僅供小白理解,大佬請走開

以下內容僅供小白理解,大佬請走開

以下內容僅供小白理解,大佬請走開

對於棧,只需要記住四個字:「先進後出」或者「後進先出」就能相當於學會了 棧,你一定覺得我在開玩笑,請聽我細細道來。

再次說明:

以下內容僅僅是我的抽象理解,並沒有實際意義,正常的**實現 棧 請看那些大佬的部落格,我的話和**只算是小白的理解,不涉及任何原理,只是方便理解和記憶。同時僅僅用簡單的偽**來表示核心演算法(為了便於理解,現僅說明順序棧,鏈棧道理模擬鍊錶是一樣的)

接下來,我就用小白的思想實現棧的這幾個操作:

int a[

100]

,top=-1

;

1.對於陣列a中的元素只能通過top變數來訪問。只能a[top]訪問,不能出現a[1]等的形式來訪問;

2.對top變數操作只能 top++,或者top–(也就是只能自增1或者自減1),同時約定top初始值為-1;

3.top變數永遠指向陣列最後乙個元素。

加上這些約定就能說明是乙個我理解的「棧」了。

對比正常**:

typedef

int elemtype;

struct stack

;void

initstack

(stack*

&s)//初始化棧

銷毀棧的操作 其實是用了new,或者malloc等操作申請記憶體之後 需要我們自己手動釋放,不過因為我們是直接申請的變數,等程式結束自然釋放,所以銷毀棧不作為重點理解。

正常**:

void

destroystack

(stack*

&s)//銷毀乙個棧

判斷乙個陣列是不是空就好說了,只需要看看我原來是不是用過這個陣列,因為我只能通過top來訪問陣列元素,所以我只要看看我是不是更改過top變數就行了,所以這麼實現:

if

(top==-1

)

如果top等於-1,說明我沒沒用過,或者說,用過了但是我又」清零「了,所以說,這時候可以判斷是不是為空。

正常**:

bool

stackempty

(stack* s)

//判斷是否為空

重點來了,進棧操作,用我約定的方式,這裡有乙個變數e,我想把e的值存在棧裡,應該怎麼操作呢

a[

++top]

=e;

top,指向的是最後乙個陣列元素,而且要想訪問陣列a,通過我的約定只能用top,所以我需要將top先加1,然後存在陣列a裡就行了。但是因為陣列大小有限,要注意越界問題。

對比正常**

bool

push

(stack*

&s,elemtype e)

//進棧操作

重點又來了,出棧操作,還是只能用top變數訪問,將棧頂的元素存在e中,同時棧少乙個元素;

e=a[top--

];

取出棧頂元素,先將top所指向的值放在e裡邊,在把top自減1,表示將原來的棧頂元素取走。入棧注意陣列右端越界,出棧也要注意陣列左端越界。

對比正常**

bool

pop(stack*

&s,elemtype &e)

//出棧操作

e=a[top]

;

取棧頂元素和出棧意思差不多,僅僅是讀出來,不拿走。同時要注意陣列是不是空

正常**:

bool

gettop

(stack* s,elemtype &e)

//取棧頂元素

以上就是棧的基本操作,肯定有一些大佬偷偷的看到了最後,希望你別的笑話我,我是乙個初學程式設計者,很多東西剛開始學,不懂,如果上述文章有錯誤,希望能告訴我。不過,以上偽**僅僅是只供理解的,沒有實際意義的,而且這是順序棧的操作過程,鏈棧也是一樣的。

理解資料結構

最近在學習各種資料結構,於是就在想,為什麼我們需要資料結構呢?為什麼要設計這麼多資料結構?資料結構到底解決了我們什麼樣的問題?我們提到 資料結構 時,一般是指電腦科學中的乙個概念,但是從本質上講,資料結構應該是指對資料的一種組織方式。既然如此,我們沒必要非在電腦科學領域中討論 概念本身,把它放在其它...

理解資料結構 資料結構緒論總結

由於關於資料結構的概念和知識點過於繁亂,所以我今天就將其理了理,然後概括了一下本章我認為較重要的一些。我們都知道計算機主要用於數值計算,而我們的資料結構主要研究非數值計算問題 大多為生活中遇到的問題 上圖就是它們的基本關係,關於其基本概念什麼的,在這裡就不多說了。其中儲存結構又叫做物理結構,其中的順...

資料結構 對於棧的理解

棧的特點 棧的表示 判滿判空 入棧 push 出棧 pop 例 用乙個陣列實現兩個堆疊 鏈棧判空 入棧 push 出棧 pop 棧的應用舉例 化為字尾表示式 字尾表示式求值 在之前的學習中,我們經常聽說棧,比如 在對比for迴圈與遞迴時,遞迴可能會導致棧溢位。今天就讓我們對棧進行更加深入的 棧是限定...