1、棧的定義數組
棧的定義:棧是限定僅在表尾進行插入和刪除的操做的線性表。函數
容許插入和刪除的一段稱爲棧頂,另外一端稱爲棧底,不含任何數據元素的棧稱爲空棧。棧又稱爲後進先出的線性表,簡稱LIFO結構。設計
棧元素具備線性關係,即前驅後繼關係,只不過他是一種特殊的線性表。他的特殊之處就在於限制了這個線性表的插入和刪除位置,它始終只在棧頂進行。這也就使得:棧底是固定的,最早進棧的只能在棧底。3d
棧的插入操做,叫作進棧,也稱壓棧、入棧。blog
棧的刪除操做,叫作出棧,也有的叫作彈棧。遞歸
2、棧的抽象數據類型隊列
由於棧也是一個線性表,因此,線性表的順序存儲和鏈式存儲對於棧也一樣適用。內存
3、棧的順序存儲結構及實現程序設計
一、棧的順序存儲結構循環
二、進棧操做
三、出棧操做
四、棧的鏈式存儲結構
鏈棧的操做絕大多數都和單鏈表相似,只是在插入和刪除上特殊一些。
五、棧的做用
棧的引入簡化了程序設計的問題,劃分了不一樣關注層次,使得思考範圍縮小,更加聚焦於咱們要解決的問題核心。反之,像數組等,由於要分散精力去考慮數組的下標增減等問題,反而掩蓋了問題的本質。
六、遞歸
棧有一個很重要的做用是在程序設計語言中實現了遞歸。好比:斐波那契數列
遞歸:把一個直接調用本身或經過調用語句間接調用本身的函數,稱做遞歸函數。每一個遞歸定義必須至少有一個條件,知足時遞歸再也不進行,即再也不引用自身而是返回值退出。
遞歸與迭代區別:迭代使用的是循環結構,遞歸使用的是選擇結構。遞歸能使程序的結構更清晰、更簡潔、更容易讓人理解,從而減小讀懂代碼的時間。可是大量的遞歸調用會創建函數的副本,會消耗大量的時間和內存。迭代則不須要反覆調用函數和佔用額外的內存。
4、隊列的定義
隊列是隻容許在一端進行插入操做,而在另外一端進行刪除操做的線性表。隊列是一種先進先出的線性表,簡稱FIFO。容許插入的一端稱爲隊尾,容許刪除的一端稱爲對頭。
5、隊列的鏈式存儲結構及實現
6、總結
棧和隊列大部分操做和單鏈表相似,再也不作詳細介紹。