20172327 2018-2019-1 《程序設計與數據結構》第二週學習總結
教材學習內容總結
第三章 集合概述——棧
1.集合是一種彙集、組織了其餘對象的對象。
2.集合中的元素一般是按照它們添加到集合的順序,或者是按元素之間的某種內在關係來組織的。
3.集合分爲線性集合和非線性集合,集合元素之間的聯繫能夠由添加到集合的次序以及元素之間的內在關係所決定。
4.集合是一種隱藏了實現細節的抽象,設計良好的接口隱藏了集合的實現。
5.對象的內部工做對系統其餘部分而言是被封裝的。
6.數據類型是一組值及做用於這些數值上的各類操做。
7.抽象數據類型(ADT)是一種在程序設計語言中還沒有定義其值和操做的數據類型。
8.數據結構是一種用於實現集合的編程結構集。
9.Java集合API是一個類集,表示一些特定類型的集合,這些類的實現方式各不相同。
1.棧是一種線性集合,遵循後進先出的原則。
2.
| 操做 | 描述 |
| -------- | :------------------------------------------: |
| push | 添加一個元素到棧的頂部 |
| pop | 從棧的頂部移除一個元素 |
| peek | 查看棧頂部的元素 |
| isempty | 肯定棧是否爲空 |
| size | 肯定棧的元素數目 |
3.棧的全部操做都是在一端進行的。html
1.類型兼容性:把一個對象賦給引用的特定賦值是否合法。類型檢查:Java會自動在編譯時標記出不合法的賦值。
2.可利用繼承和多態來建立能夠儲存任意類型的對象的集合。
3.泛型:定義一個類,能夠儲存、操做和管理一些實例化以前沒有制定類型的對象。
1.棧是計算後綴表達式的理性數據結構。
第四章 鏈式結構——棧
1.對象引用變量能夠用來建立鏈式結構。
2.在鏈表中儲存的對象泛稱爲該鏈表的結點。
3.鏈表由一些對象構成,其中每一個對象指向了鏈表中下一個對象。
4.在Java語言中,全部動態建立的對象都來自於一個名爲系統堆或自由儲存的內存區。
1.訪問元素:惟一方法是從第一個元素開始,順着該鏈表往下進行。
2.插入結點: 結點能夠插入到鏈表的前端,中間和後端,改變引用順序是維護鏈表的關鍵。
3.刪除結點:無論刪除哪一個結點,都要保證鏈表的完整性。
1. 儲存在集合中的對象不該該含有基本數據結構的任何實現細節。
教材學習中的問題和解決過程
- 問題1:隊列、鏈表和堆棧三者的問題
- 分析:隊列和堆棧是兩個相似鏈表的線性數據結構,但在使用時有更多的限制。對於通常的鏈表,能夠經過鏈表的任意位置插入和刪除節點進行修改,可是隊列只能在一端加入節點(入隊)(入棧),在另外一端一處節點(出隊)(出棧),所以隊列是先進先出(FIFO)數據結構,堆棧是後進先出(LIFO)數據結構。
上週考試錯題總結
- Which of the following is a goal of software engineering?
A .Solve the right problem
B .Deliver a high-quality solution
C .Deliver a solution on time and budget
D .All of the above
解答:
軟件工程的目標:
解決正確性問題
按時且在預算以內給出解決方案
給出高質量的解決方案。
以合情合理的方式完成上面的事情
因此以上題目前三個都屬於,因此選D
- An efficient system handles problems gracefully
A .True
B .Flase
解答:高效的系統用戶與系統之間的交互必須優良,對於錯誤有預防和恢復的能力。
- Software systems need only to work to support the work of developers, maintainers, and users.
A .True
B .Flase
解答:軟件系統必須通過細心設計、編碼和文檔說明,以便爲開發人員、維護人員和用戶的工做提供支持。
- Software must make efficient use of resources such as CPU time and memory.
A .True
B .Flase
解答:軟件必須高效地使用諸如CPU時間和儲存器之類的資源。
- A stack can be used to preserve the order of a set of data.
A .True
B .Flase
解答:堆棧那沒法保留一組數據的順序,隊列能夠
- The following code segment has ______ time complexity?
for(int i = 0; i < n; i++){前端
for(int j = 0; j < n: j=j*2){git
int val = (j*i);
System.out.println(val)
}編程
}
A .O(1)
B .O(n)
C .O(n2)
D .O(nlogn)後端
解答:這個是嵌套循環,內層循環的循環次數是log2(n),外層循環的循環次數是n,因此增加函數爲:F(n)=n·log2(n)
又由於階數與增加函數的最高階項有關,因此忽略次項與常數項。因此階次爲O(n·log2(n))。
- Which of the following has the smallest time complexity?
A .3n+5+2n
B .logn+2
C .3n+4
D .nlogn
解答:這題眼花點錯了,我也不知道該怎麼改,正確答案是C。
- A growth function shows time or space utilization relative to the problem size.
A .True
B .Flase
解答:增加函數表示與該問題大小相對應的時間或空間的使用。
結對及互評
基於評分標準,我給李楠的博客打分:7分。得分狀況以下:
正確使用Markdown語法(加1分)
模板中的要素齊全(加1分)
教材學習中的問題和解決過程, (加3分)
代碼調試中的問題和解決過程, 無問題
感想,體會真切的(加1分)
點評認真,能指出博客和代碼中的問題的(加1分)數據結構
- 20172317
20172320函數
- 結對學習內容
- 教材第3章,教材第4章
- 完成課後自測題,並參考答案學習
- 完成課後練習題
- 完成程序設計項目:至少完成PP3.二、PP3.八、PP3.九、PP4.2
其餘(感悟、思考等,可選)
這周學的有點麻煩,棧還行,就是鏈表有點糊塗。學習
學習進度條
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
0/0 |
1/1 |
8/8 |
|
第二週 |
1306/1306 |
1/2 |
20/22 |
|
參考:軟件工程軟件的估計爲何這麼難,軟件工程 估計方法編碼
計劃學習時間:10小時spa
實際學習時間:8小時
改進狀況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
參考資料