資料結構 棧

2021-06-22 09:16:58 字數 1244 閱讀 2229

1.棧stack:是限定僅在表尾進行刪除和插入操作的線性表。允許插入刪除的一端叫做棧頂top,另外一端叫做棧底bottom。棧又稱為後進先出(lifo)的線性表。即表尾是指棧頂。

2.順序棧:

定義:top指向可存入元素的位置。

typedef struct stacktypestacktype;

插入:進棧的順序是在top指向的可存入空間中壓入資料,然後top++。

status pushstack(stacktype* stack,elemtype x)

刪除:出棧的順序是找到最後乙個資料--top,然後修改x指向的值。

status popstack(stacktype* stack,elemtype *x)

3.兩棧共享空間:就是構造乙個陣列來儲存兩個棧,通常是兩個棧的空間需求有相反關係時使用。乙個的棧底在data[0],乙個棧的棧底在data[maxsize-1]。這時,滿棧的判斷就是top1==top2。

4.棧的鏈式儲存:鏈棧的棧頂在表頭,就不再需要頭結點了。

typedef struct liststackliststack;
進棧:top指向當前的棧頂元素。

status push(liststack *s, elemtype x)

出棧:返回的是那個刪掉的節點,後續不用還要釋放掉節點。

node* pop(liststack *s)

return out;

}

5.順序棧和鏈棧的對比:時間複雜度均為o(1)。順序棧要事先確定乙個固定的長度,可能存在記憶體浪費。鏈棧要求每個元素有指標域,同時也增加了一些記憶體開銷,但對於棧的長度無限制。

6.遞迴:函式的呼叫的過程是入棧出棧的過程。首先,把函式的形參從右到左壓入棧中,最後把函式名壓入。執行函式時,先取出函式名,再取出形參。當還沒有執行完畢時,進入遞迴,向棧裡壓入了另乙個函式名,最後取出時就會退回到後壓入棧的函式名。

7.迭代和遞迴的區別:迭代使用迴圈結構,遞迴使用選擇結構。遞迴會建立函式的副本,耗費時間和記憶體。迭代不需要額外的記憶體。遞迴可以使程式結構更清晰簡潔,讓人理解。

8.字尾表示式:棧的應用

中綴表示式變成字尾表示式:符號入棧。字尾表示式計算出結果:資料入棧。

資料結構 棧 棧

可以把棧想像成乙個桶 進棧 就是把和桶口一樣大的燒餅往桶裡面扔 出棧 就是把燒餅拿出來 特點 先進後出。先扔進去的燒餅最後才能拿出來,最後扔進去的燒餅,第乙個拿出來 剛開始top 1 top 1 然後把進棧的元素賦值給data top 入棧操作 void push stack s,int x els...

資料結構 棧

例子 棧是一種被限制在只能在表的一端進行插入和刪除運算的線性表。區域性變數是用棧來儲存的 可以進行插入和刪除的一端稱為 棧頂 top 另一端稱為 棧底 bottom 當表中沒有元素時 表長為0的棧 稱為 空棧。棧的修改是按 後進先出的原則進行,因此棧被稱為後進先出 last in first out...

資料結構 棧

簡單的棧的實現 在裡面使用了模版 定義 模板是c 支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數 返回值取得任意型別。include include include using namespace std template class...