20172310 2017-2018《程序設計與數據結構》(下)第三週學習總結

20172310 2017-2018《程序設計與數據結構》(下)第三週學習總結

教材學習內容總結

第五章 隊列

  • 隊列:隊列是一種線性集合,其元素從一端加入,從另外一端刪除,隊列中的元素是按先進先出的方式處理的(FIFO)。一個隊列一端爲前端(front,head),
    一端爲末端(rear,tail)。
    html

  • 隊列ADT所定義的操做前端

  • Java API中的隊列
    1.Java集合API提供了java.util.Stack類,它實現了棧集合。但它並無提供隊列類,而是提供了一個Queue接口,
    由多個類(包括LikedList類)來實現的。(課本例題5.1,5.3的代碼都使用了Queue接口)
    2.java.util.Stack類提供了傳統的push、pop和peek等操做。而Queue接口並無實現傳統的enqueue、dequeue和first操做。
    Queue接口定義了另外兩種方法,往隊列中添加元素或從隊列中刪除元素。這些方法在異常類處理上有很大的不一樣。
    一個是提供了一個布爾返回值,另外一個是拋出一個異常。java

  • 隊列的應用
    • 代碼密鑰:凱撒加密法和重複密鑰,隊列是一種可存儲重複編碼密鑰的便利集合。
    • 售票口模擬:一般用表示排隊的隊列來實現模擬。
  • 隊列的ADT
    如同棧同樣,可定義一個泛型的QueueADT接口,表示隊列的操做,,是通常目標與各類實現方式分開。git

  • 用鏈表實現隊列
    • 那兩個分別指向鏈表首元素、鏈表末元素的引用方便隊列的鏈表實現。
    • 若是鏈表是單向鏈表,就要區分從哪端添加哪端刪除元素,雙向鏈表則無所謂。
    • 鏈表實現隊列有多個操做,如enqueue操做、dequeue操做。
  • 用數組實現隊列
    • 因爲隊列操做會修改集合的兩端,所以將一端固定於索引0處要求移動元素。
    • 非環形數組實現的元素移位,將產生O(n)的複雜度。(dequeue操做)所以,對於隊列,咱們是在其兩端進行操做的,而
      順序也不是可有可無的了,用固定數組來實現棧的效率不高
    • 把數組當作環形的,能夠出去在隊列的數組實現中把元素移位的須要。

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

  • 問題1:編程

    在環形數組裏進行添加或刪除元素時,不須要移動哪一個元素
    這個是怎麼理解呢?數組

  • 問題1解決方案:
    數據結構

看這幅圖是很好理解的,把元素添加進入數組,可是刪除元素後,數組中的元素不進行移動,而是停留
在原來的位置,後續添加的元素,則跟在以前的元素後,讓前面的位置爲空,而後進行循環。學習

  • 問題2:課本提出環形數組這個概念,是這樣說的,「當隊列的末端到達數組末端是將出現難題,要使得數組空閒空間獲得很好的利用,
    咱們使用環形數組來實現隊列。」 那利用環形數組難道能夠解決「隊列的末端到達數組末端」這個難題。
  • 問題2解決方案:其實環形數組並非不會遇到容量不夠的問題,而是說不用一下擴大兩倍的容量,致使內存空間的浪費。
    環形數組要擴大容量,一樣是先將數組擴大兩倍,再將 原來的元素放入新的數組中。

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

  • 問題1:課本上的代碼有不少的錯誤,例如例題Codes
    測試

  • 問題1解決方案:
    這個例題的本意是想要對加密的內容進行解密,並且課本上encoded += (char)message.charAt(scan) - keyValue);這行代碼
    不只寫法上存在錯誤——多了一個右括號,並且邏輯是徹底不符合意思的,因而我進行了修改(我認爲這是例題想要實現的功能)
    編碼

代碼託管

(statistics.sh腳本的運行結果截圖)

上週考試錯題總結

上週沒有習題測試

結對及互評

學號 2018-2019-20172309 《程序設計與數據結構(下)》第三週學習總結

點評:

  • 博客中值得學習和改進的問題:
    • 教材內容利用代碼詳細講解,可是不必將教材中的代碼大量的放入博客中。
    • 對課本代碼有深刻的思考,也能夠提出改進意見。

點評的同窗博客和代碼

  • 本週結對學習狀況

    • 結對學習內容
      • 教材第五章關於用數組和鏈表來實現隊列的內容的學習
      • 藍墨雲課後練習的學習
      • 課後習題的探討
  • 上週博客互評狀況

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

原本很開心中秋佳節不用寫博客了,如今看來是我太天真了(;´д`)ゞ,因而假期沒有咋學習的我,節假日一結束
就陷入了瘋狂看課本的模式。總結了一下,咱們這兩週就是細化了對棧和隊列的學習,以前我只會使用棧和隊列,
而他們的一些方法是如何實現的卻沒有考慮過,通過學習才發現,咱們以前一直學習的數組和鏈表是這麼的應用普遍
,每個均可以用來實現棧和隊列的不少方法學習果真是由淺入深,當初的我是隻知其然,不知其因此然,而如今,
Java的學習則要求我知道因此然,雖然國慶又快要到了,可是看樣子博客仍是不會免的呀〒▽〒。


  • 我認爲特別重要的技能(目前的水平、課程結束後達到的水平):
    • 程序理解技能 七、8分 9分
    • 模塊實現和逐步細化 5分 8分
    • 效能分析和改進 5分 8分
    • 接口設計 4分 7分
    • 我的源碼管理 6分 8分
  • 你以及具有的專業知識、技能、能力上還差距哪些?
  • 對於這個問題,其實我發現本身在專業知識、技能、能力仍是有很大差距的。咱們每週都要寫博客,我不否定這是一種總結經驗鞏固知識的好手段,但有時候我發現本身實際上是爲了完成博客而在拼命看書,時間的限制致使本身其實有時候課本上的代碼都還沒理解透,就把他敲進電腦,因此本身的專業知識在有些方面仍是不牢。要有好的編程的技能和能力必定要有嚴密和快速的邏輯思惟能力,可能我在這方面真的不是很強,因此每次的實驗都要花費好久的時間,但我可以完成這是令我開心的,我相信堅持堅持仍是會有提升的。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 0/0 1/1 10/10
第二週 326/326 1/2 18/28 學習在一點點的深刻
第三週 784/1110 1/3 25/53

參考資料

相關文章
相關標籤/搜索