學號 20172326 《程序設計與數據結構》第三週學習總結

學號 20172326 《程序設計與數據結構》第三週學習總結

教材學習內容總結

  • 隊列是先進先出的數據結構(FIFO)與棧不一樣,隊列的兩端可分別進行操做
  • first與front相同,返回首段的值
  • API中的隊列方法,有add,element,offer,peek,poll,remove
  • 用鏈表實現隊列時,enqueue和dequeue的算法複雜度均爲O(1)
  • 用數組實現隊列時,enqueue和dequeue的算法複雜度均爲O(n),由於不管將索引值定爲頭或者尾,插入或刪除時,總會使得全部元素位置發生改變。
  • 非環形數組實現的元素位移,將產生O(n)的複雜度。
  • 由數組實現的隊列中,rear和棧中的top相似,表示隊列中的元素個數,以及數組中下一個空閒單元。
  • 爲了提升算法的效率, 咱們使用環形數組實現隊列,同時,爲了使rear在循環時始終擁有正確的值,使用
rear = (rear + 1) % queue.length;

來確保。html

教材學習中的問題和解決過程

  • 問題1:

(圖)add方法與offer方法的區別,以及優先級的體如今哪裏?java

  • 問題1理解:


(圖)能夠看出,在api中,offer方法更爲全面,對限制大小的隊列進行了考慮,使得其不拋出異常,而是拋出false。git

  • 問題2:數組隊列與鏈表隊列中誰的空間複雜度更差的問題算法

  • 問題2理解:對於一個數組隊列,其空間老是預先分配好的,所以,若是元素個數小於分配的空間,那麼勢必形成空間的浪費。但同時,鏈表中沒一個節點都存儲着對下一個節點的引用,所以,隨着存儲的元素逐漸增多,佔用的空間也將更多,因此,鏈表隊列也存在着空間的浪費問題api

  • 問題3:對於deque(雙向隊列)的理解數組

  • 理解:對於這個問題,我原本認爲,在兩端的刪除,插入方法,將破壞隊列所具備的順序性。可是咱們不妨仔細看一下他們的方法,數據結構

(圖)能夠看到,擁有這些方法後,deque便再也不是一個簡單的隊列,簡單的具備FIFO的數據結構。它也能夠被當作棧使用,固然,效率會減低。除此以外,還有多線程的部分狀況也能夠用到deque。多線程

代碼調試中的問題和解決過程

  • 問題:

(圖)
學習

編寫課後習題時,出現了空指針的異常.net

  • 問題解決方案:問題在於我沒有將參數的含義搞清,count表示當前個數,而對於scan這個索引值來講,天然須要減一,不然,出現了指針實際已經遍歷,但因爲比count少一仍要繼續向下,但笑一個爲空的狀況

代碼託管

點評過的同窗博客和代碼

結對及互評

  • 博客中值得學習的或問題:
    排版精美,對於問題研究得很細緻,解答也很周全。
  • 代碼中值得學習的或問題:
    代碼寫的很規範,思路很清晰,繼續加油!

    上週考試錯題總結

其餘(感悟、思考等,可選)

  • 本週依舊在數組與鏈表的基礎上進行隊列的學習,對鏈表的理解有了進一步的認識,同時,將棧與隊列的不一樣也有了瞭解。可是,關於鏈表,我依舊存在必定不足,須要繼續練習。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 3/3
第二週 409/409 1/2 5/8
第三週 1174/1583 1/3 10/18

附加做業

參考資料

相關文章
相關標籤/搜索