棧先進後出的特性,也就是對於的插入和刪除操作都是在棧頂進行的
佇列先進先出,從隊尾插入,對頭彈出
一般情況下棧用順序表來實現,因為棧的操作需要棧頂進行彈出操作,此時需要將棧頂指標指向上乙個元素,如果用鍊錶來做,則需要從頭開始查詢(單鏈表),使用迴圈鍊錶也需要將指標迴圈一圈,此時的時間複雜度都是o(n),也可以採用雙向鍊錶,但是雙向鍊錶實現起來並不簡單(和順序表相比),而使用線性表來進行彈出操作只需要將棧頂指標減減(--)即可,時間複雜度o(1)
而佇列一般用鍊錶來實現,因為佇列是在隊尾插入,隊頭彈出,假設使用順序表來做佇列,首先申請固定大小的陣列,向陣列(隊尾指標)中新增元素,隊尾指標一直向後移動,知道填滿佇列,此時刪除元素,隊頭指標向後移動,此時陣列的前半部分會逐漸空出,而隊尾指標一直指向最後,如果在向佇列新增元素,會溢位,但是佇列前半部分明明還有空間,這種稱為假溢位,可以擴大陣列空間,但是會造成空間的浪費,因為前一部分沒有用,也可以每彈出乙個元素將所有元素向前移動乙個位置(增加時間成本),此時可以做乙個迴圈指標,當隊尾指標指向陣列最後乙個位置時,再新增元素將隊尾指標指向陣列首位置,如果隊尾指標和隊頭指標重合,則認為佇列滿了,這種實現方式太麻煩,如果使用鍊錶做佇列,則沒有此問題,隊尾新增元素不斷的申請新空間即可,隊頭彈出元素釋放空間即可,新增元素複雜度o(1),刪除元素複雜度o(1),
棧和佇列(筆記)
1 棧的邏輯結構 棧 是限定僅在表尾插入和刪除操作的線性表。允許插入和刪除的一端成為棧頂,另一端為棧底,不含任何資料元素的棧稱為空棧。後進先出 2 棧的順序儲存結構及實現 1 棧的初始化 初始化乙個空棧只需將棧頂指標top置為 1.2 入棧操作 在棧中插入乙個元素x只需將棧頂指標top加1,然後在t...
棧和佇列筆記2
佇列也稱為堆疊,是一種先進後出,刪除和插入都在棧頂操作的線性表 棧的特性 先進後出,後進先出 最先放入棧的內容最後被拿出來,最後放入棧的內容最先被拿出來 解密回文 include include intmain 判斷字串的長度是奇數還是偶數,並找到需要進行字元匹配的起始下標 if len 2 0 e...
學習筆記(2) 棧和佇列
棧和佇列都是線性結構,是特殊的線性表。棧 僅在表尾進行插入或刪除元素的操作。表尾稱為棧頂,表頭稱為棧底。不含元素的空表為空棧。又稱為 先進後出 線性表。棧有兩種儲存結構 順序儲存和鏈式儲存 與線性表類似 設定top指標指向棧頂位置,base指標指向棧底位置,當top base 時,棧為空棧。使用c語...