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

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

教材學習內容總結

第三章 集合概述——棧

  • 集合是一種彙集,組織了其餘對象的對象。集合中的元素一般是按照它們添加到
    集合的順序,或者是按元素之間的某種內在關係來組織的,並以此劃分爲線性集合和非線性集合。
  • 集合是一種隱藏了實現細節的抽象html

  • 數據類型:是一組值及做用於這些數值上的各類操做
  • 數據結構:是一種用於實現集合的基本編程結構
  • 數據結構通常是說計算機存儲和組織數據的方式,還有就是相互之間存在一種或多種特定關係的數據元素的集
    合,簡單來講就是數據的邏輯或物理存儲方式。而數據類型就是對數據的抽象描述,包括整型、浮點型git

  • 抽象:標準的解釋是從具體事物抽出、歸納出它們共同的方面、本質屬性與關係等,而將個別的、非本質的方面、屬性與
    關係捨棄,這種思惟過程,稱爲抽象。在Java的學習中,也能夠這樣理解,就是從具體的多個數據找到他們的共性,隱藏各自的細節。
  • 抽象數據類型(ADT):是一種在程序設計語言中還沒有定義其值和操做的數據結構類型。ADT的抽象性體如今,ADT必
    須對實現細節進行定義,且這些對用戶是不可見的。程序員

  • 棧的元素是按後進先出的方法進行處理的,最後進入棧中的元素最早被移出(LIFO)
  • Java集合API是一個類集,表示了一些特定類型的集合,這些類的實現方式各不相同。算法

  • 異常就是一個對象,它定義了一種非正常或錯誤的狀況。異常由程序或運行時環境拋出,能夠按預期的被捕獲或被正
    確處理。錯誤與異常相似,只不過錯誤每每表示一種沒法恢復的狀況,且沒必要去捕獲它。錯誤和異常表示不正常或不合法的處理。編程

第四章 鏈式結構——棧

  • 對象引用變量能夠用來建立鏈式結構。
  • 鏈表由一些對象構成,其中每一個對象指向了鏈表中的下一個對象。
  • 鏈表會按需求動態增加,所以在本質上,它沒有容量限制。
  • 在鏈表中存儲的對象一般泛稱爲鏈表的結點。
  • 一般須要一個單獨的引用變量(next)來表示鏈表的首節點,終止於next引用爲空的結點。數組

  • 插入結點
    • 改變引用順序是維護鏈表的關鍵。
  • 刪除結點:安全

  • 無連接的元素
    • 存儲在集合中的對象不該該含有基本數據結構的任何實現細節。
    • 它只含有兩個重要的引用:一個指向鏈表中的下一個節點,一個紙箱將存儲進鏈表的元素。
  • 雙向鏈表
    • 須要維護兩個引用:一個引用指向鏈表的首結點;另外一個引用指向鏈表的末端點。鏈表的每一個結點都存在兩個引用:一個指向下一個元素,另外一個指向上一個元素。
  • 可使用棧來模擬遞歸處理,以跟蹤恰當的數據
  • 只要有效地實現了恰當的操做,集合的任何實現均可以用來求解問題
  • 棧的鏈表實現是從鏈表的一端添加和刪除元素數據結構

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

  • 問題1:泛型是什麼?
  • 問題1解決方案:框架

    泛型是程序設計語言的一種特性。容許程序員在強類型程序設計語言中編寫代碼時定義一些可變部分
    ,那些部分在使用前必須做出指明。各類程序設計語言和其編譯器、運行環境對泛型的支持均不同。將類型參數化以達
    到代碼複用提升軟件開發工做效率的一種數據類型。泛型類是引用類型,是堆對象,主要是引入了類型參數這個概念。學習

能夠在集合框架(Collection framework)中看到泛型的動機。
泛型只在編譯階段有效。

- 泛型的好處:ava語言引入泛型的好處是安全簡單。泛型的好處是在編譯的時候檢查類型安全,而且全部的強制轉換都是自動和隱式的,提升代碼的重用率。
  • 問題2:三四章就是學習了用數組和鏈表兩種方式實現棧的功能,那這兩種方式各有什麼優缺點呢?
  • 問題2解決方案:看了半天的資料,才發現其實這個問題能夠說成是數組和鏈表的區別。

    數組,在內存上給出了連續的空間.鏈表,內存地址上能夠是不連續的,每一個鏈表的節點包括原來的內存和下一個節點的信息

數組:
優勢:使用方便 ,查詢效率 比鏈表高,內存爲一連續的區域
缺點:大小固定,不適合動態存儲,不方便動態添加
鏈表:
優勢:可動態添加刪除 大小可變
缺點:只能經過順次指針訪問,查詢效率低

順序表的優勢:查找方便,適合隨機查找
順序表的缺點:插入、刪除操做不方便,由於插入、刪除操做會致使大量元素的移動

連接表的優勢:插入、刪除操做方便,不會致使元素的移動,由於元素增減,只須要調整指針。
順序表的缺點:查找方便,不適合隨機查找

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

  • 問題1:在藍墨雲班課的做業上,忽然出現了冒泡排序法這種排序方式,這是啥?(꒪Д꒪)ノ
  • 問題1解決方案:
    1.冒泡排序法:它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,若是他們的順序(如從大到小、首字母從A到Z)
    錯誤就把他們交換過來。走訪元素的工做是重複地進行直到沒有相鄰元素須要交換,也就是說該元素已經排序完成。
    這個算法的名字由來是由於越大的元素會經由交換慢慢「浮」到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳
    的氣泡最終會上浮到頂端同樣,故名「冒泡排序」。
    2.三種算法的區別:選擇排序須要兩層循環來實現,外層循環控制次數,內層循環控制找到最小的值。而後將內層循
    環找到的最小值與外層循環本次索引對應元素進行交換,直至遍歷完整個數組.插入排序有兩層循環,外層循環逐個遍歷
    數組元素,內層循環把外層循環的元素與該元素在內層循環的下一個元素進行比較,若是外層循環選擇的元素小於內層循
    環選擇的元素,那麼數組元素都行右移動爲內層循環元素留出位置。冒泡算法是最基礎的一個排序算法,每次使用第一個
    值和身後相鄰的值進行比較,若是是升序將大數向左邊交換,降序則向右邊交換。最終將大數移動到一邊,
    最終排成一個序列。
    結論:冒泡算法效率最低,插入算法效率最高
  • 三種基礎排序算法(選擇排序、插入排序、冒泡排序)
  • 三個基本排序算法執行效率比較(冒泡排序,選擇排序和插入排序)

代碼託管

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

上週考試錯題總結

  • 錯題1及緣由,理解狀況

一個高效的系統能夠優雅地處理問題

太粗心了。

  • 錯題2及緣由,理解狀況

可使用堆棧來保存一組數據的順序

解析:一組地址採用連續的存儲單元來依次存儲線性表的各個數據元素稱之爲線性表的順序存儲結構,順序存儲結構就是把
一堆數據按照給定的地址連續存放。而鏈表是內存中隨機存貯,只有數組這種靜態的內存分配方式纔是連續存貯的。

課後做業

pp3.9是使用Android Studio沒上傳碼雲,現附上截圖


結對及互評

點評:

  • 博客中值得改正的問題:
    • 教材內容總結很詳細,利用代碼詳細講解,可是不必將教材中的代碼大量的放入博客中,能夠嘗試用簡潔的語言表述一下。
    • 沒有發現閱讀教材的問題
  • 代碼中值得學習的問題:
    • 代碼量很大,花了不少時間本身編碼。
    • 沒有放代碼量的截圖

點評的同窗博客和代碼

  • 本週結對學習狀況
    • 20172309

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

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

這個星期又開始了敲代碼之旅,數組,集合,棧這些內容其實上個學期都有學習到一些,可是通過這一個禮拜
的學習發現,這個學期的課程更加深刻了(其實這是必然的),可是我也認識到上個學期的內容不少我都遺忘了,
因此有時間仍是要去複習一下之前的課本了( • ̀ω•́ )✧

學習進度條

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

參考資料

相關文章
相關標籤/搜索