20172328 2018-2019《Java軟件結構與數據結構》第三週學習總結

20172328 2018-2019《Java軟件結構與數據結構》第三週學習總結

概述 Generalization

本週學習了第五章:隊列。主要內容包含隊列的處理過程、如何用對例如求解問題、各類隊列的實現等。

教材學習內容總結 A summary of textbook

  • 5.1概述
  • 隊列是一種線性集合,其元素從一端加入,從另外一端刪除;隊列的順序是先進先出(First in First out)
  • 與棧的比較:在棧中,其處理過程只在棧的某一端進行,而在隊列中,其處理過程可在隊列的兩端進行。
  • 隊列的操做:
操做 說明
enqueue 向列表末端添加一個元素
dequeue 從隊列前端刪除一個元素
first 考察隊列前端的那個元素
isEmpty 斷定隊列是否爲空
size 斷定隊列中的元素數目
toString 返回隊列的字符串表示

這些命名約定並不通用於全部的集合操做。有時enqueue也被換成add或insert;dequeue也被換成remove或serve;first操做有時也稱爲fronthtml

  • 5.2javaAPI中的隊列
  • Java集合API並無提供隊列類,而是提供了一個Queue接口,由多個類(包括LinkedList類)來實現的。
  • Queue接口沒有實現傳統的enqueue、dequeue、first操做,而定義了另外兩種方法,往隊列裏添加元素或者從隊列裏刪除元素,這些方法在異常處理時有很大差異,一個是提供了布爾返回值,一個是拋出一個異常。
  • Queue接口定義了一個element方法,該方法檢索隊列首部的元素,但不刪除它。
  • Queue接口提供了兩個方法add和offer,往隊列中添加元素。add操做能夠確保隊列中含有給定的元素,若是給定元素沒有添加到隊列中,該操做將拋出異常;offer操做把給定元素插入到隊列中,若是插入成功,返回true,不然返回false
  • Queue接口提供了兩個方法poll和remove,從隊列中刪除元素。當試圖從一個空隊列中刪除一個元素時,發生異常;若是隊列爲空,poll方法返回null,remove方法拋出一個異常。
  • 5.3使用隊列:代碼密鑰
  • 瞭解凱撒加密法和重複密鑰。知曉隊列是一種可存儲重複編碼密鑰的便利集合。
  • 5.4使用隊列:售票口模擬
  • 具體代碼理解和體現。
  • 5.5隊列ADT
  • 定義的泛型QueueADT接口,表示隊列的操做,把操做的通常目標和實現方式分開。
  • 5.6用鏈表實現隊列
  • 要用鏈表實現棧,就要操做鏈表的兩端。因此除了一個指向鏈表首元素的引用(稱爲head)以外,還須要跟蹤另外一個指向鏈表末元素的引用(稱爲tail),還須要一個整型變量count來跟蹤隊列中的元素數目。
  • 要區分往鏈表的哪端添加或刪除元素嗎?爲了使dequeue複雜度爲O(1),咱們選擇從末端入列,從前端出列。具體內容參照代碼學習。
  • 5.7用數組實現隊列
  • 因爲隊列操做會修改集合的兩端,所以將一端固定在索引爲0處要求移動元素。
  • 由於要求移動元素,因此要實現dequeue操做的複雜度爲O(n),數組實現的操做使得效率低。
  • 設計要點:用於實現集合的數據結構與集合自己的匹配是很是重要的,固定數組實現策略對棧是高效的,是由於全部的活動(添加和刪除元素)都是在集合的一端進行的。而對於隊列,咱們是在其兩端進行操做的,而順序也不是可有可無的了,所以,用數組來實現隊列的效率不高。
  • 用環形數組來實現隊列,它定義在名爲CircleArrayQueue的類中。環形數組並非一種新結構,它只是一種把數組用來存儲隊列的方法。從概念上說,若是數組的最後一個索引後面跟的是第一個索引,那麼該數組就可用做環形數組。
  • 5.8雙端隊列
  • 雙端隊列是隊列的擴展,它容許從隊列的兩端添加、刪除和查看元素。前端

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

  • 1.看教材的時候好多地方不能理解,與上文意不符,後來和同窗們討論,才發現書上的好多錯誤。
  • 問題1具體解決:改過來,還能怎麼樣!畢竟是一本優秀的教材,可能翻譯的不太對,包容~~~
    • 74頁代碼的Integer應在<>裏
    • 74頁for循環中的圓括號)多了
    • 74頁變量好像也不太對
    • 83頁代碼中front是什麼???此處應該是head
    • 85頁設計要點中最後一句話:用固定數組來實現的效率不高。怎麼會是棧!!!應該是隊列
  • 2.環形數組若是滿了,如何往裏面添加元素,是要覆蓋以前的元素嗎?是由於滿了而添加不進去?仍是添加後原來的元素丟失?我理解的不深刻。
  • 問題2具體解決:數組中僅僅存儲數組大小-1個元素,保證rear轉一圈以後不會和head相等。也就是隊列滿的時候。rear+1=head,中間恰好空一個元素。當rear=head的時候。必定是隊列空了。
    java

因此在數組中全部單元都已填充後,若要添加元素進去,就須要擴大數組了,已有數組的元素必須按照其在隊列中的正確順序複製到新的數組中去,寫一個expandCapacity方法來知足。git

public void expandCapacity() 
    { 
        T[] larger = (T[]) (new Object[queue.length*2]);
        for(int scan = 0;scan <count; scan++)
        {
            larger[scan] = queue[front];
            front = (front + 1) % queue.length;
        }
        front = 0;
        rear = count;
        queue = larger;
    }

上週測試活動錯題改正 Correction

本週沒有測試,故沒有此項。設計模式

碼雲連接

代碼量(截圖)

結對及互評Group Estimate

-20172301
-20172304數組

點評模板:

  • 博客中值得學習的或問題:
    • 20172301:若是你也正在學習Java,那麼我相信他的博客必定對你有所助益,由於他的博客是有溫度的博客,爲何這麼講?當遇到一點點思惟糾紛的時候,人腦老是規避並幻想複雜的後續工做,而總在尋找捷徑。而當在繁雜的生活雜事中,靜下心保持本身的節奏去思考一些真正有用的問題,產生一些新奇、嚴謹的思想實際上是很值得敬佩的。其實本身懂和解釋給別人讓別人懂是兩回事。郭愷同窗的博客確實給人講清楚了他所思考的問題,而且問題的剖析角度和過程都很嚴密,故言其爲有溫度的博客風格。
    • 20172304:少便是多(less is more)應該是我另外一位搭檔夥伴的博客風格了吧。上學期的博客做業我猜想其實他是不偏重的,主要將學習精力花在了代碼上,這學期明顯有不少改變;我以爲博客質量明顯在變好,並且不少內容在抓重點,必定是通過了考慮的,因此我相信段志軒同窗這學期必定能把這門課學好。
  • 本週結對內容:本週討論了第五章的書本錯誤,以及對於代碼Codes的理解讓咱們都更加深刻理解了隊列可以保持元素的順序這個道理。而後咱們還討論了環形數組問題,都驚歎於rear = (rear+1) % queue.length的神奇。可以巧妙的更新rear的值。數據結構

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

    中秋乃佳節、明月遞思念。很開心的放鬆了三天,但願有更好的精力去投入本學期各學科以及工做。架構

    還有,想念父母和親人必定要多打電話。溫情時刻比什麼都值得咱們珍惜,比什麼都能讓咱們認識本身的存在,比什麼都能讓咱們這些處在異鄉的人倍感幸福。less

    補充做業:在你一輩子中身體最健康、最旺盛的時候,能在大學學習和研究,是一輩子中少有的機會。請說明一下,你以及具有的專業知識、技能、能力上還差距哪些?請看這個技能調查表,從表中抽取5-7項你認爲對你特別重要的技能,記下你目前的水平,和你想在課程結束後達到的水平(必須列出5項)。連接模塊化

個人回答 (MY ANSWER) :

  • 我認爲對我最重要的技能是:
  • 1.programming:Design(架構設計、模塊化設計、接口設計) now: 4 ---- expectation:8 & 9
  • 2.programming:implementation(模塊實現、逐步細化) now:4---- expectation:8
  • 3.program:performance(效能分析與改進)now:5 ---- expectation:8
  • 4.supporting knowledge(幫助軟件開發工做的其餘技能)now:2 ---- expectation:6
  • 5.Basic Design patterns & principles
    (基本設計模式)now:3---- expectation:7

學習進度條Learning List

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 0/0 1/1 8/8
第二週 621/621 1/2 12/20
第三週 678/1299 1/3 10/30

參考資料Reference

相關文章
相關標籤/搜索