1. 程式人生 > >第三章學習總結

第三章學習總結

更強 style 初始化 不同 就是 ont 輸出 地方 !=

第三章 棧和隊列

本章我們學習了線性結構的另外兩種表現形式:棧和隊列。

:只限定僅在表尾進行插入或刪除的線性表。表尾段稱作棧頂,表頭端稱作棧底,它的修改原則是後進先出,用於按照保存數據時的相反順序來使用數據。類似於我們生活中放書拿書,最後疊上去的最早被抽出來。

隊列:是一種先進先出的線性表,它只允許在表的一段進行插入,而在另一端刪除元素。允許插入的一段稱為隊尾,允許刪除的一段稱為隊頭。它類似於我們生活中排隊買東西,先來的先買,先輸入的數據先輸出。

接下來談談我在做作業時所遇到的問題。

括號匹配問題

一開始沒能將棧的知識與題目進行聯系,簡單來說就是一腦懵逼。後來經過老師上課和書本上的提示,了解了大致的算法。於是創建棧、初始化棧、運用

while循環和switch函數,遇到左括號壓入棧(Push),遇到右括號就進行匹配。然後我結合書本沒有定義獲取棧頂元素的函數GetTop,而是直接輸出棧頂元素(用Pop函數,返回一個char類型的字符),將flag賦值為1,進行匹配後成功則跳出循環,不成功將flag賦值為0,最後用if判斷棧是否為空或者flag是否為1,並按要求輸出yesno,基本問題不大。

銀行排隊問題

雖然題目看起來很復雜,但它實際上就是入隊和出隊另一種表現。我用了循環隊列的形式,一樣的定義順序結構,初始化循環隊列、輸入元素輸出元素。唯一有一些頭疼的地方就是,由於要定義兩個隊列AB,輸出順序有所不同,首先要考慮AB

兩個隊列都不為空的情況,這時候判斷條件為:while((QA.front!=QA.rear)&&(QB.front!=QB.rear)&&(QA.rear-QA.front)%1000>=2),兩次A隊出隊,一次B隊出隊,之後還要考慮B為空A不為空,判斷條件:

while(QA.front!=QA.rear)A為空B不為空:while(QB.front!=QB.rear),將依次輸出的數字放到新定義的數組中去,最後將數組輸出即可。

經過作業和實踐,我對鏈表的使用也更加清晰,對數據結構的真實含義有了更進一步的理解:數據結構是把我們之前所學過的最基本的語法進行疊加改造,最後組成一個功能更強的語句,便於我們解決後續更多復雜的問題,實現更復雜的算法。

第三章學習總結