1. 程式人生 > >數據結構 棧與隊列知識小結

數據結構 棧與隊列知識小結

沒有 一個 修改 先進先出 知識 存儲 col 自己實現 strong

本章介紹了兩種特殊的線性表:棧和隊列,主要內容如下:

(1)是限定僅在表尾進行插入和刪除的線性表,又稱為後進先出的的線性表。

兩種存儲結構:(順序表示)順序棧、鏈棧(鏈式表示)

主要操作:進棧、出棧;

對於順序棧的進棧和出棧註意要判斷棧滿和棧空;

(2)隊列是一種先進先出的線性表。它只允許在表的一端進行插入,而在另一端刪除元素;

兩種存儲結構:(順序表示)循環隊列、(鏈式表示)鏈隊;

主要操作:進隊、出隊。

對於順序的循環隊列的進隊和出隊操作要判斷隊滿或隊空;

??凡是涉及隊頭或隊尾指針的修改都要將其隊MAXQSIZE求模;(這是我學這一章感覺最巧妙的地方!!!!!!!覺得特別巧妙,用這種方式實現循環);


接著就是學習關於棧和隊列的種種操作;

1、用棧實現的學習了兩個案例:數制轉換括號匹配以及遞歸

1)關於數制轉換這裏,老師當時講的那個直接返回結果,用while(.......... sum = sum*10+tmp),這裏的tmp是n每次%10取出的數字;最後返回sum即是結果,我覺得十分巧妙,自己當時是沒想到的;自己當時想的是用一個字符串存起來,再將它倒置即可;

2)括號匹配這裏,我覺得思想也十分巧妙;一開始我是想說不用棧實現可以嗎,然後就用自己的方法取實現,一開始有一點像雙向隊列的思想,主要是被一種形式限制住了,以為括號匹配是這種[{}],或者[[[(({}))]]],所以我每次都取頭跟尾進行匹配

,發現總是有幾個測試點過不了,後來發現,其實括號匹配還可以這種形式:(){}[],這種也算是匹配成功,所以我一開始的那種思想就被打破了;一開始我總覺得我那種做法是對的,但是就是過不了,後來思想轉換了,每次將最近的括號進行匹配,其實這種就是棧的思想;後來就用棧取實現,不過我用的是stl裏的函數,直接拿來用,老師叫我不用stl的東西,自己寫一寫底層的東西,後來就實現了;

3)遞歸:遞歸這裏我覺得我是學的不是那麽熟的,很少自己寫過遞歸,上學期是學過遞歸的,但是沒有自己實現過,雖然懂它的思想,但是從思想上升到自己實現還是有一大段路要走的,然後這學期用過遞歸,主要是在ACM中師兄教了那個深度搜索(dfs)但是自己其實也還不是那麽熟練。

2、隊列

隊列的話,老師給了我們一道編程題,銀行隊列窗口模擬,一開始也是用stl去實現,然後再把stl的底層慢慢去實現;

總結:關於上次定的目標,我覺得沒有百分百達到;

這章我覺得我得還好,課本的知識其實不是那麽熟,覺得課本有時講的太冗長,但是正是這些底層實現的東西我們還是需要去學習的,不能總是拿現成的來用;

下一章的學習目標:希望自己能悟出下一章算法的思想精髓,學到一些很巧妙的思想,並能又思想上升到實現的階段!

數據結構 棧與隊列知識小結