20172323 2018-2019-2 《程序設計與數據結構》第2周學習總結

20172323 2018-2019-2 《程序設計與數據結構》第2周學習總結

教材學習內容總結

本週學習了第三章集合概述——棧和第四章鏈式結構——棧
第三章定義了與集合相關的概念與術語,討論了集合的抽象設計以及繼承、多態性、泛型和接口等多項問題,最後經過棧這一集合展現了與集合設計、實現和使用等有關的問題。
第四章學習了一種建立數據結構的技術,利用引用來建立對象之間的連接php

3.1 集合

這一節主要在講與集合相關的概念和術語,有一些概念比較難以理解。html

  • 集合是一種彙集、組織了其餘對象的對象。
  • 集合能夠分爲線性集合和非線性集合(從某種程度上,非線性集合也許根本就沒有任何組織形式)
  • 集合中元素一般是按它們添加到集合的順序或者是按元素之間的某種內在關係來組織的。
  • 抽象數據類型
    • 抽象能隱藏某些細節。而集合隱藏了其的某些細節並定義了一些接口操做,用戶能夠經過這些接口操做管理集合中的對象。所以集合是一種隱藏了實現細節的抽象。
    • 數據類型是一組值及做用於這些數值上的各類操做
    • 抽象數據類型(ADT)是一種在程序設計語言中還沒有定義其值和操做的數據類型。
    • 數據結構是一種用於實現集合的基本編程結構

3.2 棧集合

  • 棧的元素是按後進先出的方法進行處理的,最後進入棧中的元素最早被移出

3.3 主要的面向對象概念

  • 繼承與多態性
  • 泛型:能夠定義一個類,它能夠在存儲、操做和管理在實例化以前沒有指定是何種類型的對象。所以,任意類型的對象均可以存儲在這個類中。如
class Box<T>//用於管理類型T的對象的聲明和代碼
Box<Widget> box1 = new Box<Widget>//變量box1的類型爲Box<Widget>

3.6 棧ADT

  • Java接口定義了一個抽象方法集,有助於把抽象數據類型的概念與其實現分隔開來
  • 經過接口名做爲返回類型,方法就不會侷限於實現棧的任何特定類

4.1連接做爲引用

  • 對象引用變量能夠用來建立鏈式結構
  • 鏈式結構是一種數據結構,它使用對象引用變量來建立對象之間的連接,其中的一個對象能夠指向另外一個對象,從而在鏈表中建立一個對象的線性次序。在鏈表中存儲的對象一般泛稱爲該鏈表的結點(node)。

4.2管理鏈表

  • 訪問元素
Person current = first;
for (int i = 0; i < 3; i++){
    current = current.next;
}

這種方法能夠訪問指定位置的結點元素。在循環中,須要定義使用「current」指針而不是「first」指針,不然一旦first指針指向第二個元素,就沒有指向第一個的指針了,因而第一個結點將沒法被訪問。node

String searchstring = "Tom Jones";
Person current = first;
while ((not(current.equals(searchstring)) && (current.next != null)
current = current.next;

這種方法能夠訪問指定內容的結點。git

  • 插入結點:改變引用順序是維護鏈表的關鍵
    web

  • 刪除結點編程

  • 無連接的元素
    - 定義一個單獨的結點類,將全部元素連接在一塊兒
    - 雙向鏈表

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

  • 問題1:抽象數據類型(ADT)的理解
  • 問題1解決方案:讀完教材上關於ADT的一些解釋,仍是對這一律念比較的模糊。首先,數據類型是一組性質相同的值的集合以及定義在此集合上的一些操做的總稱;抽象是指抽取出事物具備廣泛性的本質。它是抽出問題的特徵而忽略非本質的細節,是對具體事物的一個歸納。抽象是一種思考問題的方式,它隱藏了複雜的細節,只保留了實現目標所必須的信息。把這兩個概念結合一下,抽象數據類型是一種在程序設計語言中還沒有定義其值和操做的數據類型。用實例來展現抽象數據類型,就好比用線性表描述學生成績表,用樹或圖描述遺傳關係。

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

  • 問題1:PP3.2的題目中,如何反向顯示每一個詞的字符以及正確理解
  • 問題1解決方案:
    • 一開始讀題時,個人理解是句子中單詞的順序不變,但每一個詞的字母順序顛倒。好比「Pink Floyd」顛倒後成爲「kinP dyolF」。但後來與同窗的交流中,好像是本身理解過分了,可能只是顛倒一下單詞順序就好了,結果應該是「Floyd Pink」。兩個彷佛都有道理,因此我兩個都作了一遍。
    • 由於是要用數組來表示棧,上學期作中綴轉後綴的實驗時運用了一個「split」的方法,它能夠將句子按特定的方式分隔開存入數組中。實現第一種時,我使用了內外兩層循環,先將一個句子按空格分割把每個單詞分別存入數組中,再將單詞挨個顛倒字母順序再進行輸出拼接。實現第二種就很簡單,將每一個單詞存入數組再反向輸出便可。
  • 問題2:藍墨雲測試活動中遇到的一些問題,詳見博客

代碼託管

上週考試錯題總結

  • 錯題1:Software systems need only to work to support the work of developers, maintainers, and users.
    A .True
    B .Flase
  • 錯題2:Which of the following has the smallest time complexity?
    A .3n+5+2n
    B .logn+2
    C .3n+4
    D .nlogn
  • 解析:這是要找最小時間複雜度。根據下圖,可知logn是最小的。

結對及互評

  • 博客中值得學習的或問題:
    • 內容充實,各方面都很詳細
    • 課程學習中有本身的思考,很能啓發我學習的靈感
  • 基於評分標準,我給譚鑫的博客打分:5分。得分狀況以下:
    正確使用Markdown語法(加1分):
    模板中的要素齊全(加1分)
    教材學習中的問題和解決過程, 一個問題加1分
    代碼調試中的問題和解決過程, 一個問題加1分數組

  • 基於評分標準,我給方藝雯的博客打分:5分。得分狀況以下:、
    正確使用Markdown語法(加1分):
    模板中的要素齊全(加1分)
    教材學習中的問題和解決過程, 一個問題加1分
    代碼調試中的問題和解決過程, 一個問題加1分數據結構

點評過的同窗博客和代碼

其餘

這周的學習怎麼說呢,是自我感受良好,看見同窗們寫的博客以及代碼做業,真是有些相形見絀、自愧不如的感受。好比藍墨雲的做業就是審題不仔細加上課堂上也沒有徹底弄懂,致使最終事倍功半。學習

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 8/8
第二週 470/470 1/2 12/20

參考資料

相關文章
相關標籤/搜索