棧是限定僅在表尾進行插入或刪除操作的線性表。所以對這樣的線性表來說,表尾稱為棧頂,表頭稱為棧底。
因為棧是僅在表尾進行修改,即棧的修改是按後進先出的原則進行的,所以棧又稱後進先出的線性表。
棧的表示:
順序棧,即是利用連續一組位址連續的儲存單元一次存放自棧底到棧頂的元素,附設兩個指標,top指向棧頂,base指向棧底,當top == base表示空棧,當top-base == stacksize表示棧已滿,如圖
棧的應用:
1.數制轉換:基於十進位制數n和其他d進製數的轉換原理:n = (n div d)*d+ n mod d (div 為整除,mod為求餘運算)
遞迴n階hanoi塔問題:當n=1時,只需要將編號為1的圓盤從塔座x直接移至塔座z上。當n>2時,就需要借助y作為輔助塔。如果能把編號為n的圓盤之上的n-1個圓盤從塔座x移至塔座y上,則可以將編號為n的圓盤從塔座x移至z,然後再將塔座y的n-1個圓盤移至塔座z上,這時候就考慮怎麼把n-2個圓盤放到x塔座上,就可以將第n-1個圓盤放到塔座z上,如此類推,便可求解
void hanoi(int n, char x, char y, char z)
else
}
遞迴的問題實際是以棧的形式實現的。當有多個函式構成巢狀呼叫時,按照「後呼叫先返回」的原則,函式之間的資訊轉移和控制轉移必須通過棧來實現。即系統將整個程式執行時的所需的資料空間安排在乙個棧中,每當呼叫乙個函式時,就為它在棧頂分配乙個儲存區,每當乙個函式退出時,就釋放它的儲存區,則當前正執行的函式的資料區必然在棧 資料結構學習 棧
這一系列部落格的目的在於複習鞏固資料結構的基礎知識,為考研面試筆試做準備,所以重在原理,實踐不是重點。參考書籍有嚴蔚敏老師的 資料結構 c語言版 c c 資料結構與演算法速學速用大辭典 define stacksize 100 typedef int datatype typedef structs...
資料結構學習之棧 佇列等
gdb除錯段錯誤 1.ulimit c unlimited 2.ulimit c 1000 3.gcc 檔案 g 4.執行程式 a.out 生成core檔案 5.gdb a.out core 順序棧1.出棧 datatype popseqstack seqstack stack 功能 從順序棧中出棧...
資料結構學習二 棧
棧 限制插入和刪除操作只能在乙個位置上進行的表。對棧的基本操作有push 進棧 和pop 出棧 前者相當於插入,後者則是刪除。棧也叫作先進後出表。本文使用鍊錶實現棧。pragma once 鍊錶型別宣告 struct node pragma once include node.h 棧定義 m hea...