學習C++後,相比較於C,C++比較容易實現棧和隊列的操做,像是開掛同樣,而徒手用C寫的話太繁瑣了 棧和隊列有區別,前者是後進先出,後者是先進後出 其次呢,棧是一端受限,一段容許進行操做的線性表。先放的後取,後放的先取。放在棧上說,就是先進後出。 隊列是一種限定性的線性表。先進先出。 和棧同樣,它常見的兩種存儲是順序存儲和鏈式存儲。
本題要求在一個數組中實現兩個堆棧。
Q1:輸出超限 A1;在申請完空間後,忘記修改S->MaxSize的值,致使輸出超限
若是用一個循環數組表示隊列,而且只設隊列頭指針Front,不設尾指針Rear, 而是另設Count記錄隊列中元素個數。請編寫算法實現隊列的入隊和出隊操做。
A1:忽略了循環,在增長減小的時候應該修改count的值,還要保證添加的位置不超多MaxSize A2:輸出用puts(), puts() 和 printf() 相比也有一個小小的缺陷,就是若是 puts() 後面的參數是字符指針變量或字符數組, 那麼括號中除了字符指針變量名或字符數組名以外什麼都不能寫。
假設表達式中容許包含3種括號:圓括號、方括號和大括號。即(,[,'{'。 編寫一個算法判斷表達式中的括號是否正確配對, 要求利用棧的結構實現。
先遍歷所輸入的數據,遇到{,(,【就入棧,遇到},),】先判斷棧內是否爲空,若爲空,則不配對,若不爲空,則取棧頂, 與之配對,配對成功就繼續,知道數據所有配對完,在判斷棧內是否還有元素,有則配對失敗,無則成功。
Q1:一個很容易遺忘的點,就是遇到右符號,可是棧裏爲空的狀況 A1:經過pta的提示,在遇到右符號時,多加一條對棧的判斷
報數遊戲是這樣的:有n我的圍成一圈,按順序從1到n編好號。從第一我的開始報數,報到m(m<n)的人退出圈子; 下一我的從1開始報數,報到m的人退出圈子。如此下去,直到留下最後一我的。其中n是初始人數;m是遊戲規定的退出位次 (保證爲小於n的正整數)。要求用隊列結構完成。輸出數字間以空格分隔,但結尾不能有多餘空格。
首先判斷m是否大於n,是則結束;不是則將數據輸入到隊列裏,設置變量i,當i==m,輸出隊頭而且出隊,不等於就出隊在入隊
`A1;這題上課剛剛見過簡化版本,回來就開始打,因此問題不大,編譯錯誤只是忘記換C++; C++處理這類題真的比C快捷不少
算法
若是用一個循環數組表示隊列,而且只設隊列頭指針Front,不設尾指針Rear,而是另設Count記錄隊列中元素個數。請編寫算法實現隊列的入隊和出隊操做。
錯誤代碼
數組
正確代碼
學習
錯誤在處理輸出的時候是輸出隊頭,沒有找好隊頭的位置 致使代碼崩潰,在考試時也不能冷靜思考,對隊列的理解不夠 也受到插入的影響,使得輸出的代碼有點亂。
輸入一個後綴表達式,程序求出表達式值。
這題pta上沒有,是課本上的,當時也沒有認真看,致使上機手足無措。當時寫這題時就想着混點分就好,結果沒混到, 就想把前面的隊列寫出來。