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

棧和隊列

1.本週學習總結

學習C++後,相比較於C,C++比較容易實現棧和隊列的操做,像是開掛同樣,而徒手用C寫的話太繁瑣了
    棧和隊列有區別,前者是後進先出,後者是先進後出
    其次呢,棧是一端受限,一段容許進行操做的線性表。先放的後取,後放的先取。放在棧上說,就是先進後出。
    隊列是一種限定性的線性表。先進先出。
    和棧同樣,它常見的兩種存儲是順序存儲和鏈式存儲。

2.PTA實驗做業

2.1.題目1:

本題要求在一個數組中實現兩個堆棧。

2.1.2代碼截圖

2.1.3本題PTA提交列表說明

Q1:輸出超限
A1;在申請完空間後,忘記修改S->MaxSize的值,致使輸出超限

2.2.題目1:

若是用一個循環數組表示隊列,而且只設隊列頭指針Front,不設尾指針Rear,
而是另設Count記錄隊列中元素個數。請編寫算法實現隊列的入隊和出隊操做。

2.2.2代碼截圖

2.2.3本題PTA提交列表說明

A1:忽略了循環,在增長減小的時候應該修改count的值,還要保證添加的位置不超多MaxSize
A2:輸出用puts(), puts() 和 printf() 相比也有一個小小的缺陷,就是若是 puts() 後面的參數是字符指針變量或字符數組,
那麼括號中除了字符指針變量名或字符數組名以外什麼都不能寫。

2.3.題目1:

假設表達式中容許包含3種括號:圓括號、方括號和大括號。即(,[,'{'。
編寫一個算法判斷表達式中的括號是否正確配對, 要求利用棧的結構實現。

2.3.1設計思路

先遍歷所輸入的數據,遇到{,(,【就入棧,遇到},),】先判斷棧內是否爲空,若爲空,則不配對,若不爲空,則取棧頂,
與之配對,配對成功就繼續,知道數據所有配對完,在判斷棧內是否還有元素,有則配對失敗,無則成功。

2.3.2代碼截圖


2.3.3本題PTA提交列表說明

Q1:一個很容易遺忘的點,就是遇到右符號,可是棧裏爲空的狀況
A1:經過pta的提示,在遇到右符號時,多加一條對棧的判斷

2.4.題目1:

報數遊戲是這樣的:有n我的圍成一圈,按順序從1到n編好號。從第一我的開始報數,報到m(m<n)的人退出圈子;
下一我的從1開始報數,報到m的人退出圈子。如此下去,直到留下最後一我的。其中n是初始人數;m是遊戲規定的退出位次
(保證爲小於n的正整數)。要求用隊列結構完成。輸出數字間以空格分隔,但結尾不能有多餘空格。

2.4.1設計思路

首先判斷m是否大於n,是則結束;不是則將數據輸入到隊列裏,設置變量i,當i==m,輸出隊頭而且出隊,不等於就出隊在入隊

2.4.2代碼截圖

2.4.3本題PTA提交列表說明

`A1;這題上課剛剛見過簡化版本,回來就開始打,因此問題不大,編譯錯誤只是忘記換C++; C++處理這類題真的比C快捷不少算法

三、棧和隊列上機考試

錯題一

若是用一個循環數組表示隊列,而且只設隊列頭指針Front,不設尾指針Rear,而是另設Count記錄隊列中元素個數。請編寫算法實現隊列的入隊和出隊操做。

錯誤代碼
數組

正確代碼
學習

錯誤在處理輸出的時候是輸出隊頭,沒有找好隊頭的位置
致使代碼崩潰,在考試時也不能冷靜思考,對隊列的理解不夠
也受到插入的影響,使得輸出的代碼有點亂。

錯題二

輸入一個後綴表達式,程序求出表達式值。

這題pta上沒有,是課本上的,當時也沒有認真看,致使上機手足無措。當時寫這題時就想着混點分就好,結果沒混到,
就想把前面的隊列寫出來。
相關文章
相關標籤/搜索