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

1.本週學習總結

  • 這周是棧和隊列的學習,二者的原理簡單而且c++STL對queue和stack類進行了包裝,使用起來很是方便。因此通常使用問題不大,不過用於解決更深層次的問題,還須要更好的理解棧和隊列。
  • 棧至關於一個單口容器,後放的在上面,當取出時就要先取出上面的,因此是後進先出。隊列則像是一頭進一頭出的隊伍,先排到隊列的先出來。棧能夠用於實現深度優先搜索,隊列則能夠用於實現廣度優先搜索。同時,二者還能夠結合巧妙解決逆轉,表達式轉換或者求值等問題。c++

    2.PTA實驗做業

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

2.1.1設計思路

在CreateStack函數中爲結構體和數組分配好內存,push函數先判斷堆棧是否滿,而後根據Tag對相應堆棧進行輸入
pop函數先根據Tag判斷對那個堆棧操做,而後再進行判斷是否爲空,不空就出棧。

2.1.2代碼截圖

2.1.3本題PTA提交列表說明


Q1:輸出搞錯了,盡是沒有輸出Tag沒有輸出算法

Q2:沒賦值直接用Mystack->MaxSize數組

2.2.題目2:6-12 jmu-ds-舞伴問題

假設在週末舞會上,男士和女士們分別進入舞廳,各自排成一隊。跳舞開始,依次從男隊和女隊隊頭各出一人配成舞伴,若兩隊初始人數不一樣,則較長那一隊未配對者等待下一輪舞曲。現要求寫一算法模擬上述舞伴配對問題。 你須要用隊列操做實現上述算法。請完成下面5個函數的操做。函數

2.2.1設計思路

男女所有分別入隊,而後先男出隊,後女出隊,直到至少一隊爲空。

2.2.2代碼截圖



2.2.3本題PTA提交列表說明


Q1:函數都比較簡單可是多須要細心處理,因此有小錯誤學習

2.3.題目1:7-3 符號配對

請編寫程序檢查C語言源程序中下列符號是否配對://、(與)、[與]、{與}。設計

2.3.1設計思路

左括號入棧,右括號就取棧頂配對,根據配對結果輸出。若是最後棧空即爲配對成功。

2.3.2代碼截圖



2.3.3提交列表



Q1:一個輸出寫錯一直沒發現。
Q2:對/和*判斷處理不夠細心,循環要移動兩次3d

2.4.題目1:7-7(選作) 銀行排隊問題之單窗口「夾塞」版

排隊「夾塞」是引發你們強烈不滿的行爲,可是這種現象時常存在。在銀行的單窗口排隊問題中,假設銀行只有1個窗口提供服務,全部顧客按到達時間排成一條長龍。當窗口空閒時,下一位顧客即去該窗口處理事務。此時若是已知第i位顧客與排在後面的第j位顧客是好朋友,而且願意替朋友辦理事務的話,那麼第i位顧客的事務處理時間就是本身的事務加朋友的事務所耗時間的總和。在這種狀況下,顧客的等待時間就可能被影響。假設全部人到達銀行時,若沒有空窗口,都會請求排在最前面的朋友幫忙(包括正在窗口接受服務的朋友);當有不止一位朋友請求某位顧客幫忙時,該顧客會根據本身朋友請求的順序來依次處理事務。試編寫程序模擬這種現象,並計算顧客的平均等待時間。code

2.4.1設計思路

建一個結構體,包括名字,到達時間,辦理時間,朋友圈,而後輸入數據創建鏈表,而後鏈表第一個數據入隊列,再遍歷剩下鏈表節點,若是發現某節點名字在第一個數據的朋友圈中而且在朋友辦理事務以前到達就入隊,把入隊的節點所有刪除,重複操做,直到鏈表爲空,就意味着處理完畢。blog

2.4.2代碼截圖





2.4.3提交鏈表


Q1:沒有考慮好空閒時間和第一個客戶不是0分到達的狀況隊列

三、棧和隊列上機考試

題目一:6-3 jmu-ds-表達式求解

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



錯誤緣由:

  • 沒有考慮負數 解決:在判斷數字的同時判斷數字前邊有沒有負號
相關文章
相關標籤/搜索