DS博客做業03--棧和隊列

1.本週學習總結

「棧像一隻襪子,隊列就像通心粉」,這個比喻很形象。
棧和隊列其實有相似之處,好比它們都只能在端點進行插入、刪除,沒有像數組那麼方便取出數據,但它們有本身獨特的優點,像符號配對、報數和銀行問題,使用棧和隊列是很好的選擇。
它們的不一樣之處在於棧只有一個端點,出棧、入棧都是經過一個端口,而隊列出隊、入隊則在不一樣端口,因此有些問題就更適合用隊列來解決。因爲它們結構上的差別,棧中元素都是先進後出,隊列則先進先出。因此經過棧和隊列的配合,能夠實現隊列的逆轉。
棧和隊列的容器能夠大大簡化咱們的代碼,使代碼更簡潔明瞭。判斷字符串這題使用棧的容器的代碼是本身寫函數代碼的1/2。雖然使用容器,出入棧(隊)看似簡單,其實不一樣的題目仍是有難度的,符號配對、表達式轉換就複雜許多,要考慮的狀況較多,測試點也比較繁多。

2.PTA實驗做業

棧、隊列函數題目分別選擇1題
棧、隊列編程題分別選擇1題編程

2.1題目1:在一個數組中實現兩個堆棧

2.1.2代碼截圖


2.1.3本題PTA提交列表說明。

Q1:出現多種錯誤
A1:剛開始作的時候沒有按書上的作法,同時將S->Top1和S->Top2同時置爲-1
Q2:棧滿,棧空的條件沒有考慮清楚
A2:因爲剛開始S->Top1和S->Top2都設置錯了,棧滿棧空就更不用說了,後來看了書才知道,棧空爲S->Top1==-1,S->Top2==MaxSize,棧滿爲S->Top2-S->Top1==1

2.2題目2:jmu-ds-舞伴問題

2.2.2代碼截圖


2.2.3本題PTA提交列表說明。

Q1:剛開始編譯錯誤
A1:緣由是pta上的編譯器沒選C++,還有剛開始的時候對結構體的使用有點忘記了,卡了一會
Q2:出現格式錯誤
A2:輸出男女舞伴中間要2個空格,沒注意只輸出一個,後來發現這個輸出樣例的空格和上面好像不太同樣,仔細看才發現是兩個空格

2.3題目3:7-2 jmu-ds-符號配對

2.3.1設計思路

輸入字符串
遍歷字符串
若是是左括號就進棧
是右括號就判斷是否棧空,是就輸出no,結束程序。若棧不空,繼續判斷棧頂元素是否是和右括號匹配的左括號,不是則輸出no,結束程序
出棧
循環結束
判斷棧是否爲空,空則輸出yes,不然輸出棧頂元素在輸出no數組

2.3.2代碼截圖



2.3.3本題PTA提交列表說明。

Q1:出現部分正確
A1:一開始模仿7-1字符串是否對稱的作法,把左右符號都一次性進棧,再遍歷字符串,看看和棧頂元素是否匹配,然而這種作法遇到{}()這種例子時就崩了。後來就採用遍歷字符串,發現左符號就進棧,遇到右符號就開始判斷了,再也不是等符號都入棧了纔開始判斷。
Q2:若不匹配,輸出當前棧頂元素再換行輸出no,若棧頂爲空,則輸出no
A2:作的時候沒有考慮棧空問題,只對棧不空時作了處理,輸出棧頂元素再輸出no,因此在遇到右符號開始判斷的時候,先判斷棧是否爲空,是就只輸出no,結束程序

2.4題目4:7-6 銀行業務隊列簡單模擬

2.4.1設計思路

建兩個隊列,q1表明A窗口,q2表明B窗口
先輸入顧客總數,而後在循環中依次輸入每一個顧客編號,每輸入一個就判斷一個,如果奇數就進q1隊列,偶數就進q2隊列
在q1和q2隊列非空的狀況下,先把q1中隊頭前兩個元素先輸出再出隊,而後把q2中隊頭元素輸出、出隊,完成一次循環
最後若是q1隊列中有剩餘元素,就都輸出,q2也是一樣的處理方法

2.4.2代碼截圖


2.4.3本題PTA提交列表說明。

Q1:思路問題
A1:一開始沒有想到用兩個隊列來作,就停住了,後來採用兩個隊列,問題就簡單了許多
Q2:部分正確
A2:沒有考慮到只有A窗口顧客或只有B窗口顧客這種狀況,因此空格的輸出有點問題,因此在q一、q2隊列中有剩餘元素的狀況中加了先判斷flag變量的值,看是否是第一個元素

三、棧和隊列上機考

jmu-ds-舞伴問題

錯誤代碼截圖



進隊列時應是Q->rear=(Q->rear+1)%MAXQSIZE,出隊列時是Q->front=(Q->front+1)%MAXQSIZE,考試的時候把count和MAXQSIZE混淆了,用count代替了MAXQSIZE,因此編譯器一直報錯,但當時沒有發現錯誤,就只好直接Q->rear++、Q->front++
輸出配對舞伴時,直接輸出DeQueue(Fdancers,p)結果,忘了是應先調用DeQueue函數,再輸出函數裏面的p.name
出錯緣由在於雖然知道題目思路,但沒有注意一些細節的處理,雖然題目已經作過一遍,沒有真正理解透就形成這個結果

7-1 符號配對

錯誤代碼截圖





輸入字符串的時候,少了str[i++]=ch,以致於程序出錯,連結果都沒法輸出。還有就是判斷棧是否爲空時多了!應該是if(s.empty()),若知足則輸出"?-}"這種符號,由於多了'!'答案也都是錯誤的。作pta時後兩個測試點沒過,因此代碼仍是存在一些問題
字符串輸入少了str[i++]=ch,這個就是很低級的錯誤了,短期內完成代碼仍是有必定難度的,關鍵仍是本身代碼量不夠吧
相關文章
相關標籤/搜索