20172327 2018-2019-1 《程序設計與數據結構》第四周學習總結

20172327 2018-2019-1 《程序設計與數據結構》第四周學習總結

教材學習內容總結

第六章 列表

列表集合


1.鏈表和列表對比:鏈表是一種實現策略,使用引用來在對象之間建立連接。列表集合是一種概念性表示法,列表能夠由鏈表和數組來實現。

2.棧和隊列都是線性結構,其元素只能在末端添加和刪除。列表集合更通常化,能夠在列表的中間和末端添加和刪除元素。

3.列表集合分爲3種類型:
有序列表(ordered list):其元素按照元素的某種內在特性進行排序。
無序列表(unordered list):其元素間不具備內在順序,元素按照它們在列表中的位置進行排序。
索引列表(indexed list):其元素能夠用數字索引來引用。

Java API 中的列表


1.Java集合API中提供的列表主要是支持索引列表。

2.Java API沒有任何類能直接實現以上描述的有序列表。

3.Arraylist和Linkedlist都實現了java.util.List接口。html

方法 描述
add(E element) 往列表的末端添加一個元素
add(int index,E element) 往指定索引處插入一個元素
get(int index) 返回指定索引處的元素
remove(int index) 刪除指定索引處的元素
remove(E Object) 刪除指定對象的第一個出現
set(int index,E element) 替代指定索引處的元素
size() 返回列表中的元素數量

列表ADT


1.不少常見操做能夠爲全部類型的列表定義,這些操做之間的差異在於如何添加元素。

2.

操做 描述
removeFirst 在列表中刪除第一個元素
removeLast 在列表中刪除最後一個元素
remove 在列表中刪除某個元素
first 查看位於列表前端的元素
last 查看位於列表末端的元素
contains 肯定列表是否含有某個元素
isEmpty 肯定列表是否爲空
size 肯定列表中的元素數量


3.有序列表在添加元素時,只須要用add,位置取決於其鍵值。無序列表add操做有三種變體:addToFront(元素添加到列表前端)addToRear(元素添加到列表末端)addAfter(把元素添加到某個已知元素後邊)前端

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

  • 問題1:爲何用數組實現列表時沒有用環形數組,與用數組實現隊列時有何區別?
  • 問題解決分析:、對於非環形數組數組實現隊列假定隊列的首元素老是存儲在數組的索引0處,因爲隊列處理會影響該集合的兩端,所以在刪除元素時,該策略要求移動元素,使得dequeue操做的複雜度爲O(n),數組實現的操做選使得效率低,而把數組看作環形的,能夠去除在隊列的數組實現中把元素位移的須要。而對於使用數組實現列表,通常的列表也能夠從兩端添加和刪除元素,可是它們還有從列表中間插入或刪除元素,所以沒法避免要移動元素,也可使用環形數組方法,可是當從列表中間插入或者刪除元素,仍然須要移動元素,於是使用環形數組就顯得沒有必要了

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

  • 問題1:在實現ArrayOrderedListTest測試時,我遇到了顯示最後一個數字時,人家顯示爲null這個問題。
    java

  • 解決分析,在我對前面ArrayList類檢查時,發現我在顯示last時,將rear-1不當心寫成rear了,因此它所讀取的是最後一個後邊的,因此確定爲空。git

上週考錯題總結

  • 錯題1:A polymorphic reference uses _______________, not the type of the reference, to determine which version of a method to invoke.
    A .the type of the object

B .the type of the reference
C .both A and B

D .none of the above
解析:多態引用不能使用參考的類型來肯定要調用的方法的版本。編程

  • 錯題2:A reference variable can refer to any object created from any class related to it by inheritance.
    A .true

B .false

解析:一個引用變量能夠指向建立自任何與其具備繼承相關性的類的任一對象。數組

  • 錯題3:Common features should be located as low in a class hierarchy as is reasonable, minimizing maintenance efforts.
    A .true

    B .false

解析:共同特徵應該在合理的條件下儘量高的至於該層次結構中,以最小化維護工做。數據結構

  • 錯題4:The most efficient way to implement an array-based stack keeps the top of the stack at the position 0 of the array?
    A .true

    B .false

解析:出於運行效率的考慮,基於數組的棧實現老是使棧底位於數組的索引0處。學習

  • 錯題5:The implementation of the collection operations should affect the way users interact with the collection.
    A .true

    B .false

解析:集合操做的實現細節不該該影響使用者與集合進行交互的方式測試

  • 錯題6:In an array implementation of a Stack, the array is ___________ causing the implementation to have to create a new larger array and copy the contents of the stack into the new array in order to expand the capacity of the stack.
    A .Dynamic
    B .Static

    C .Flexible
    D .Polymorphic
    .net

    正確答案: B 個人答案: D
    解析:對數組的理解不透徹。

  • 錯題7:By using the interface name as a return type, the interface doesn’t commit the method to the use of any particular class that implements a stack.
    A .true

    B .false

    正確答案: A 個人答案: B
    解析:書中有類似的話,理解有誤。

  • 錯題8:A data structure that uses object reference variables to create links between objects is
    A .Linked Structure

    B .Pointer

C .Self-referential
D .Array
正確答案: A 個人答案: B
解析:沒有看清題目,沒有看清數據結構幾個字,選成了指針。

  • 錯題9:A linked implementation of a stack adds and removes elements from the _______ of the linked list.
    A .Front

    B .Rear
    C .Middle
    D .None of the above

    正確答案: A 個人答案: D
    解析:應該是頭刪,尾進,題目模糊。

  • 錯題10:The first operation removes an element at the front of the queue and returns a reference to it.
    A .True

B .False

正確答案: B 個人答案: A
解析:由於刪除操做會移動指針,可是不會返回。

  • 錯題11:Which of the following operations of a queue examines the element at the front of the queue?
    A .Enqueue
    B .isEmpty

    C .size
    D .first

    解析:isEmpty檢查是否爲空,first輸出最前面的元素。

代碼託管

結對及互評

正確使用Markdown語法(加1分)
模板中的要素齊全(加1分)
教材學習中的問題和解決過程, (加3分)
代碼調試中的問題和解決過程, 無問題
感想,體會真切的(加1分)
點評認真,能指出博客和代碼中的問題的(加1分)

  • 20172317
    基於評分標準,我給以上博客打分:4分。
  • 20172320
    基於評分標準,我給以上博客打分:8分。

    • 結對學習內容
      • 教材第6章
      • 完成課後自測題,並參考答案學習
      • 完成課後練習題
      • 完成程序設計項目:至少完成PP6.八、PP6.十一、PP6.17

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

國慶期間學的這一章,原本因該有不少時間,但由於沒有把握和控制,因此用在學習上的時間並很少,感受這章我依然學不懂,很糾結,還在補前面的,但願下章會變好點。對於結對編程嘛,我也沒辦法,我感受咱們三個歷來不商量,各學各的,每次讓我給他們打分,我以爲這對我來講就是完徹底全的形式主義,走走流程罷了。目前我遇到的問題,我都會去問其餘同窗,我以爲結對編程在我這沒有實際意義,既然博客要保留,我還會繼續更新,但我對於這方面,不會加以修改。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 8/8
第二週 1306/1306 1/2 20/28
第三週 1291/2597 1/3 18/46
第四周 4361/6958 2/3 20/66

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

  • 計劃學習時間:10小時

  • 實際學習時間:8小時

  • 改進狀況:

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索