博客作業03--棧和隊列
阿新 • • 發佈:2018-04-14
排名 fifo 創建 bubuko lse 程序 判斷 分享圖片 思路
1.學習總結
棧只能在同一端進行入棧出棧操作(FILO),而隊列是在一端入隊,在另一端出隊(FIFO)。
查找了一些算法,灰色部分是目前還未接觸過的算法
2.PTA實驗作業
2.1.1 題目1:字符串是否對稱
2.1.2 設計思路
定義變量X,數組a[]存放數據; 定義變量N=0,i控制循環,記錄元素個數; 定義棧S; while 輸入的X不為換行符 令a[N]等於X,並且N自增一; 以N為棧的最大容納量創建棧S; for i=0 to N a[i]進入棧S; end for for i=0 to a[i]!=‘\0‘ X=S出棧的數值; if a[i]與X不相等 { 輸出 “no”; 返回 0; } end for 輸出 “yes”; 返回 0;
2.1.3 代碼截圖
2.1.4 PTA提交列表說明
一開始因為C/C++部分操作弄混了,修改後第二個測試點對了,但是第一個一直不對,以為是數組設置的不夠大,但是在我增大到讓程序運行超時時仍然不正確,也讓其他同學替我看了,找不到到底錯在哪,但題目給的樣例能正確輸出。
2.2.1 題目2:符號配對
2.2.2 設計思路
定義棧S; 定義自變量flag=1作為正誤判斷標誌,i控制循環,len記錄字符串長度; 定義變量s[100000],X,e記錄數據; 初始化棧S; while(1) { 輸入字符串s; if s[0]為‘.‘並且s[1]為0 退出循環; 給len賦值s的長度; 棧S的大小Size加上len; for i=0 to s[i]!=‘\0‘ if s[i]為‘/‘ 或‘[‘ 或‘{‘ s[i]入棧; else if s[i]為‘/‘並且s[i+1]為‘*‘ 且 i+1<len { } }
2.2.3 代碼截圖
2.2.4 PTA提交列表說明
經過漫長的編寫,測試後發現題目給的sample3輸出結果不對,調試後找到了問題:我采取的是在一開始先錄入所有的數據,直到收到‘.‘和‘\n‘,但是第三個樣例中這樣輸入會導致後面的數據不能進入數組,造成結果錯誤,所以我改變了數據輸入的方式,也的確對了,但是第六個測試點“左右符號個數相同,達到最大值,但不匹配”不明白是什麽意思,也沒辦法找數據測試。
2.3.1 題目3:銀行業務隊列簡單模擬
2.3.2 設計思路
定義變量N記錄總人數,n為顧客編號; 定義變量i控制循環,na,nb為格子隊列的元素數,e記錄出隊元素,數組a[1000]記錄完成業務的顧客編號; 定義並初始化隊列QA,QB; 輸入N; if N>0 循環N次,按奇偶將顧客編號放入不同的隊列中; i=0;flag=1; 循環N次 if flag==1且QA不為空 QA連續兩次出隊列,並將編號記錄在數組a中; if QB不為空 flag=0; else QB出隊一次,記錄出隊的編號; if QA不為空 flag=1; for i=0 to N-1 輸出a[i]+" " 輸出a[i]
2.3.3 代碼截圖
2.3.4 PTA提交列表說明
- 第一次提交時只有第一個測試點(題目給的樣例)正確,經過調試後對代碼進行了修改
修改前:
修改後:
1.無論是na還是nb,當其為0時皆表示隊列中沒有元素存在,邊界情況應該註意這一點;
2.建立在上面那一點錯誤的情況下的錯誤。考慮到flag的初始值為1,而變為0是在flag==1的前提下,若是將QB出隊的條件限制太多,反而不能夠成功讓QB隊列中的元素出隊。
3.截圖本周題目集的PTA最後排名
3.1棧的PTA排名
3.2隊列的PTA排名
總分:128分
4. 閱讀代碼
將十進制數轉為任意進制的數
原地址:{https://blog.csdn.net/qianqin_2014/article/details/51031090}
該段代碼可將輸入的十進制數轉化為自定義的進制數
優點:以前做進制轉化可能還要考慮輸出數的順序、考慮放入數組的順序,但是使用棧,直接將轉化後的數逐個進棧再全部出棧,不必考慮順序的問題。一個簡單的代碼體現了棧的特點。
5. 代碼Git提交記錄截圖
emmm...下次應該一次提交一個代碼的
博客作業03--棧和隊列