【資料結構】棧的基礎知識(無程式碼)
一、概念
棧: 是限定在表尾進行插入和刪除操作的線性表。
注意:
- 首先棧是個線性表,棧元素具有線性關係,即前驅後繼關係。
- 始終只能在表尾即是棧頂進行插入和刪除操作,而不是棧底。棧底是固定的,最先進棧的只能在棧底。
進棧出棧的變化形式:
- 棧對線性表的插入和刪除的位置進行了限定,但沒有對元素進出的時間進行限制。
- 在不是所有元素都進棧的情況下,事先進去的元素也可以出站,只要保證是棧頂元素出棧就行。
如有1,2,3個數字依次進棧:
1進2進3進,3出2出1出
1進1出,2進2出,3進3出
1進2進,2出1出,3進3出等工5中變化方式。
因此,如果元素數量多,出棧的變化將會有很多種。
二、棧的抽象資料型別
三、棧的順序儲存結構及實現
- 用陣列下標為0的一端作為棧底,首元素在棧底,變化最小。
- 定義top變數來指示棧頂元素在陣列中的位置,必須小於StackSize。
- 當棧存在一個元素時,top=0。因此通常把空棧的判定條件定位top=-1。
1、進棧:棧頂指標加1,將新插入元素複製給棧頂空間
2、出棧:棧頂指標減1,將要刪除的棧頂元素賦值給e
3、兩棧共享空間
引入:
- push操作:首先判斷是否已經棧滿,再判斷是棧1還是棧2,分別進行進棧操作即可。
- pop操作:只判斷是棧1還是棧2,分別再判斷是否為空,再進行彈棧操作。
總結:針對相同資料型別的棧的一個設計上的技巧,同資料型別是前提。
四、棧的鏈式儲存結構及其實現
- 棧的鏈式儲存結構,簡稱為鏈棧。
- 因為棧是在棧頂來做插入和刪除操作的,所以鏈棧的棧頂放在單連結串列的頭部比較方便。
- 另外已經有了棧頂在頭部了,單連結串列中比較常用的頭結點(包括頭指標)也就失去了意義,通常對於鏈棧來說,是不需要頭結點的,棧頂直接指向第一個元素。
- 對於鏈棧來說,基本不存在棧滿的情況,除非記憶體已經沒有可以使用的空間。
- 空棧,連結串列原定義是頭指標指向空,那麼鏈棧的空其實就是top=NULL。
1、進棧操作:
- 把當前的棧頂元素賦值給新結點的直接後繼。
- 將新的結點s賦值給棧頂指標。
2、出棧操作:
3、將棧頂結點賦值給p。
4、使得棧頂指標下移一位,指向後一結點。
順序棧和鏈棧的區別及應用場景
1、順序棧和鏈棧的時間複雜度是一樣的,均為O(1)。
2、空間效能:順序棧需要事先確定一個固定的長度,存在村內空間浪給,但是存取是定位很方便。而鏈棧則要求每個 元素都有指標域,增加了記憶體開銷,但是對於棧的長度無限制。
3、如果棧的使用過程中元素變化不可預料,最好用鏈棧,繁殖,如果元素變化在可控範圍內則用順序棧會好一點。(跟陣列和 的區別是一樣的)
五、棧的作用
1、遞迴----斐波那契數列
1)迴圈迭代實現
2)遞迴函式實現
分析:
遞迴定義:把一個直接呼叫給自己或通過一系列的條用語句間接地呼叫自己的函式,稱作遞迴函式。
遞迴和棧的關係:
2、四則運算表示式求值
不需要括號的字尾表示式,也稱為逆波蘭表示。
字尾表示式:所有運算子號都是在運算數字的後面出現。
中綴表示式:所有的運算子號都在兩個數字中間,也就是平常見的表示式
相關文章
- 【資料結構】串的基礎知識(無程式碼)資料結構
- 【資料結構】佇列的基礎知識(無程式碼)資料結構佇列
- 公共基礎知識-資料結構-樹資料結構
- 【資料結構】二叉樹的基礎知識資料結構二叉樹
- Rust中陣列資料結構基礎知識Rust陣列資料結構
- 資料結構與演算法之基礎知識資料結構演算法
- 實戰PHP資料結構基礎之棧PHP資料結構
- 達夢資料庫基礎知識(二)資料庫邏輯結構資料庫
- Redis基礎知識(學習筆記1--五種基礎資料結構)Redis筆記資料結構
- 達夢資料庫基礎知識(一)資料庫物理儲存結構資料庫
- 資料庫基礎知識資料庫
- 資料結構基礎學習之(棧和佇列)資料結構佇列
- 【資料結構基礎】棧簡介(使用ES6)資料結構
- 程式基礎知識
- 計算機系統結構的基礎知識計算機
- 【資料結構】樹的基本知識資料結構
- 達夢資料庫基礎知識(三)達夢資料庫記憶體結構資料庫記憶體
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- GEO資料庫基礎知識資料庫
- 資料庫基礎重要知識資料庫
- 基礎知識梳理~資料庫資料庫
- JavaScript 的資料結構和演算法 - 棧程式碼篇JavaScript資料結構演算法
- SAP SD基礎知識之組織結構
- 值得收藏的資料分析基礎知識
- 資料庫基礎知識整理與複習總結資料庫
- 夯實基礎系列三:資料庫知識總結資料庫
- 資料結構相關知識資料結構
- Java基礎知識整理之程式碼塊Java
- 資料結構-棧資料結構
- 資料結構 - 棧資料結構
- Python基礎知識架構Python架構
- SAP SD基礎知識之主資料
- java基礎知識--資料型別Java資料型別
- 資料庫基礎知識介紹!資料庫
- shell指令碼的基礎知識指令碼
- Redis基礎資料結構Redis資料結構
- Java基礎知識總結Java
- React 基礎知識總結React