20202323 2020-2021-2《資料結構與面向物件程式設計》課程總結
20202323 2020-2021-2《資料結構與面向物件程式設計》課程總結
-
課程內容總結
課程總結
第一章:引言——java程式設計入門
本章介紹了Java程式設計語言和基本的程式開發過程。介紹了面向物件的開發方法,包括相關的概念和術語。
瞭解Java程式設計語言,瞭解程式編譯執行的步驟,理解問題求解的一般方法,瞭解軟體開發的一般過程,瞭解面向物件技術相關概念,面向物件的程式設計,
類是物件的藍圖,虛擬機器介紹與安裝,IDEA介紹與安裝。
第二章:資料和表示式
介紹了Java中使用的基本資料型別及執行計算時表示式的使用。討論了資料型別之間的轉換,以及如何藉助於Scanner類互動地從使用者讀入輸入。
1.print及prinlnt方法
2.字串連線:"+"
3.轉義字元:\b:回退鍵 \t:製表符 \n;換行 \r:回車 \ ":雙引號 \ ':單引號 \ \:反斜槓
4.變數宣告:通知程式預留位置並標誌儲存位置名稱
5.變數名=(賦值)變數值
6.常量:final,其值不能改變
7.基本資料型別: 8種(byte,short,int,long,float,double,boolean,char)
8.boolean只有true和false
9.算術運算:+、-、*、/、%, 關係運算:、>、>=、<、<=、==、!=, 邏輯運算:&&、||、!
10.運算子優先順序:相同優先順序滿足從左到右的結合律。
- 第三章:使用類和物件
1.new:返回指向新建物件的引用
2.多個引用變數可以指向同一個物件
3.String類方法:compareTo (String str);equals();length()等。
4.Java標準類庫中的類按包來組織。每個類都屬於一個具體的包。
5.Random類:偽隨機數生成器執行復雜的計算產生隨機數
6.Math類:方法都是靜態的,可以直接呼叫。
7.NumberFormat類:有兩個方法getCurencyInstance和getPercentInstance返回用於格式化數值的物件。getCurencyInstance返回貨幣格式物件,getPercentInstance返回百分比格式物件。
8.DecimalFormat類:按慣例使用new運算子來例項化物件。
9.print,println,printf方法(printf屬於C,便於移植)。
- 第四章:條件和迴圈
1.if與if-else語句
2.浮點數的比較:計算兩個差值的絕對值,在與公差進行比較。
3.字元比較:Unicode順序,大小寫字母,數字要聯絡ASCII表中的編碼。
4.對角比較:equals。
5.switch語句:switch(){case :break;default:}
6.while語句 break跳出迴圈。
7.do-while 語句:do{}while();
8.for 語句:for( ; ; ),與while等價
-
第五章:編寫類
1.類:屬性(變數/常量)+方法(函式)。
2.類是物件的抽象\藍圖,而物件是類的具體例項。
3.UML類圖:實現、關聯、聚合、組合、繼承。
4.封裝public、private
5.靜態類
靜態變數(static):有時也稱類變數,它由類的所有例項共享,在一個物件中修改靜態變數的值,就等於修改了其他所有物件中該靜態變數的值。
靜態方法:不需要為了呼叫方法而例項化類的一個物件,只能訪問靜態變數或區域性變數。
6.類關係:依賴,聚合
7.方法過載與重寫:過載:根據引數型別與數量確定初始化方法 重寫:重新編寫父類方法
8.測試
第七章 陣列
本章主要講了定義並使用陣列來組織資料,討論邊界檢查及容量管理技術,討論陣列作為物件及物件陣列的問題。
陣列
- 陣列例項化;
- 陣列越界問題排查與預防;
第八章 繼承
1.extends繼承,程式碼複用,Java只支援單繼承
2.super與this常用於呼叫構造方法
3.方法過載與重寫:過載:根據引數型別與數量確定初始化方法 重寫:重新編寫父類方法
4.Object類是所有類的父類
5.abstract抽象類達抽象概念,不能用new例項化
6.抽象類的子類:實現父類的抽象方法變成具體類,不實現父類抽象方法仍要用abstract修飾
第九章 多型
1.多型引用在不同的時候可以指向不同型別的物件
2.多型引用執行時才將方法呼叫與它的定義繫結在一起
3.引用變數可以指向宣告繼承於它的任意類的任何物件
4.介面是一組抽象方法,與抽象類一樣不能被例項化
5.介面層次:介面可以繼承介面;類可以實現介面,但不能繼承介面。
6.Comparable介面:compareTo()
7.和class一樣,介面可以用來宣告物件引用變數
8.介面引用可以指向實現這個介面的任意類的作何物件
9.方法的引數可以是多型的
第十章 異常
1.錯誤和異常代表不常見的或不正確處理的物件
2.錯誤(Error)不用捕獲
3.處理異常:在異常發生的地方處理;在程式的其他地方處理
4.程式中出現異常不捕獲異常,程式會崩潰
5.try-catch 語句: Java中把正常流程放try塊中,錯誤(異常)處理放catch塊中,每個catch 子句處理try塊中可能丟擲的一種特定型別的異常,注意多個catch一定把父類放後面處理, finally:總會執行,用於資源管理
6.如果沒有在異常發生處捕獲及處理,異常會被傳播給呼叫的方法
7.throw:方法中丟擲Checked Exception,方法宣告中必須有throws。
8.Java異常處理是要處理Exception類及其子類:
9.產生RuntimeException的問題在呼叫程式碼
10.I/O異常: 幾乎所有的IO API都可能丟擲異常
第十一章 遞迴
介紹了遞迴的概念、遞迴的實現及其正確的用法。
第十二章 演算法分析
討論了包括遞迴演算法在內的演算法複雜度的分析技術,介紹了大0符號。
第十三章 查詢與排序
1.查詢
- 線性查詢:設定哨兵在陣列開頭或結尾,以便提高查詢效率。
- 二分查詢:從中間開始,要求表是有序的,每次比較後可以減少查詢池中的一半元素
- 分塊查詢:先二分查詢,再線性查詢
- 雜湊查詢:直接通過關鍵字找到儲存地址。
- 雜湊查詢
2.排序
-
- 選擇排序:分別將每個值放在排好序的最終位置,從而完成一組值的排序。
- 插入排序:將一個具體的值插入到表中已有序的子系列中,從而完成一組值的排序。
- 氣泡排序:重複地比較表中的相鄰元素,如果它們不符合要求則交換他們。
- 快速排序:根據一個任意選定的劃分元素來對錶進行劃分,然後再遞迴地對劃分元素兩邊的欄位進行排序,從而完成對錶的排序。
- 歸併排序:遞迴地對分表,知道每個子表只含有一個元素時為止,然後再將子表按序合併,從而完成對錶的排序。
第十四章棧
- 棧是一種線性集合,其元素的新增和刪除都是在同一側進行了,特性是先進後出,後進先出(LIFO)的原則,即,只允許在表尾插入和刪除的線性表。我們通常將允許插入和刪除的一段叫做棧頂(top),而將另一端稱為棧底(bottom)。類似於一個沒有蓋,但有底的圓筒,你的加入和刪除只能從上端先進行。
- 表示式有三種標識法,分別是前、中、字尾表示法。其中,字首表示法的操作是,連續出現的兩個運算元和在它們之前且緊靠著的運算子構成一個最小表示式。字尾表示法是指運算子的順序就是表示式的運算順序。中綴表達法是一個通用的算術或邏輯公式表示方法, 操作符是以中綴形式處於運算元的中間。
- 棧的優勢是,存取速度快,且棧之間的資料可以共享;缺點是缺乏靈活性,存取有嚴格的要求。
- 棧的初始化命令為:stack,基本操作和命令有empty( )——判斷是否為空;peek( )——取棧頂值;push(object)——入棧;pop( )——出棧。
第十五章 佇列
1 佇列ADT
-
佇列是一個線性集合,它在一端新增元素,在另一端刪除元素————先進先出。
-
介面中一般有以下功能:
- enqueue:將元素插入到隊尾。
- dequeue:從隊頭刪除元素。
- first:檢測隊頭的元素。
- isEmpty:判定佇列是否為空。
- size:斷定佇列中的元素個數。
2 使用佇列:編碼K值
Caesar密碼
3 使用佇列:模擬票務櫃檯
提出假設、模擬實現
4 實現佇列:使用連結串列
使用LinearNode物件的連結串列實現佇列,必須在連結串列的兩段進行操作,還要用一個整型變數count記錄佇列中的元素個數。
5 實現佇列:使用陣列
使用一個迴圈陣列來實現佇列,定義類Circular-ArrayQueue。將陣列當做一個環來使用,第一個下標接在最後一個下標的後面。
第十六章 樹
1.樹
節點+邊
-
子節點
-
兄弟結點
-
滿二叉樹
-
完全二叉樹
2. 樹的遍歷
-
先序遍歷
-
中序遍歷
-
後序遍歷
-
層序遍歷
3. 樹的實現策略
陣列
4. 二叉樹的實現
5. 決策樹
簡單的決策樹可用一棵二叉樹來表示。診斷時,從根節點的問題開始,根據答案選擇適當的路徑直至到達葉結點。
第十七章 二叉排序樹
1. 二叉查詢樹
- 查詢類:
- getRoot()返回根節點
- getParent()返回父結點
- getChildCount返回孩子結點數
- getFirstChild()返回第一個孩子結點
- getNextChild()返回下一個兄弟結點
- isEmpty()判定樹是否為空樹
- depth()求樹的深度
- traverse()遍歷樹
- 插入類:
- tree()建構函式,初始化置空數
- assign()給當前結點賦值
- insert()插入操作,可以是結點或子樹
- 刪除類:
- makeEmpty()將樹清空
- Delete()刪除操作,可以是節點或子樹
2. 二叉查詢樹的實現
3. 平衡二叉查詢樹
第十八章 堆和優先佇列
1. 堆
完全二叉樹
-
addElement(),向堆中新增一個新元素。
-
removeMin(),刪除最小值,並重構堆。
-
removeMax(),刪除最大值,並重構堆。
-
findMin(),尋找最小值。
2. 堆的實現
3. 堆排序
-
可以使用陣列形式,用順序結構儲存最為合適。
-
最小堆(小頂堆)
-
最大堆(大頂堆)
3. 優先佇列
具有相同優先順序的項按先進先出的規則排
第十九章 圖
- 無向圖:任意兩個頂點之間的邊都是無向邊。
- 有向圖:圖中所有邊都是有向邊。
- 鄰接點:邊的兩個頂點。
- 邊的權:圖的邊帶有與邊相關的資料。
- 入度、出度、路徑、迴路、子圖、連通圖、非連通圖、生成樹
- 圖的表示法:鄰接矩陣(無向圖鄰接矩陣、有向圖鄰接矩陣、網的鄰接矩陣)、邊集陣列、鄰接表、十字連結串列、鄰接多重表
- 圖的遍歷:
- 廣度優先遍歷:從一個頂點開始,優先遍歷周圍區域。
- 深度優先遍歷:從一個頂點開始,優先遍歷源節點拓展出的可達結點。
- 最短路徑問題:Kruska演算法、Dijkstra演算法
- 拓撲排序
第二十章 雜湊演算法
涉及建立雜湊表以便於儲存及獲取物件的相關概念。
作業總結
編寫一組程式,要體現一下知識點: (1)繼承 (2)多型 (3)重寫 (4)過載 (5)目錄建立 (6)檔案建立 (7)位元組流讀寫 (8)字元流讀寫
- 作業2:實現自己的ArrayList
1.編寫自己的ArrayList類 要求:實現增加、刪除、修改、查詢、判斷是否為空、返回list長度等操作。 2.測試。
- 作業3:ArrayStack測試
(1)撰寫自己的類; (2)提供StackADT,ArrayStack(框架),實現ArrayStack裡面的剩餘方法; (3)編寫測試類,測試所寫的方法是否正確。
- 作業4:棧應用—進位制轉換
演算法基於原理: N = (N div d)×d + N mod d 例如:(1348)10 = (2504)8 ,其運算過程如下: N N div 8 N mod 8 1348 168 4 168 21 0 21 2 5 2 0 2
要求輸入一個十進位制數,轉換成任意進位制數並輸出。
- 作業5:最小生成樹測試
1.畫出Prim演算法的最小生成樹的生成過程 2.畫出Kruscal演算法的最小生成樹的生成過程 3.計算最小權值
- 作業6:快速排序測試
3,44,38,5,47,15,36,26,27,2,46,4,19,50,48
快速排序
給出第一趟快速排序的結果!
- 作業7:最後一次測試
實驗報告連結彙總
實驗一:linux基礎與java開發環境
1、基於命令列進行簡單的Java程式編輯、編譯、執行和除錯。
2、練習Linux基本命令;
4、編寫簡單的Java程式。
20202323 實驗一《Linux基礎與Java開發環境》實驗報告 - 20202323蒙思洋 - 部落格園 (cnblogs.com)
實驗二:Java基礎(資料/表示式、判定/迴圈語句)
1、 編寫簡單的計算器,完成加減乘除模運算。
2、要求從鍵盤輸入兩個數,使用判定語句選擇一種操作,計算結果後輸出,然後使用判定和迴圈語句選擇繼續計算還是退出。
3、編寫測試程式碼,測試驗證。
20202323 實驗二Java基礎(資料、表示式、判定、迴圈語句) - 20202323蒙思洋 - 部落格園 (cnblogs.com)
實驗三:資料結構與面對物件程式設計
1、 初步掌握單元測試和TDD
2、 理解並掌握面向物件三要素:封裝、繼承、多型
3、初步掌握UML建模
4.、完成藍墨雲上 (1)-(5)實驗。
20202323 實驗三 《資料結構與面向物件程式設計》實驗報告 - 20202323蒙思洋 - 部落格園 (cnblogs.com)
實驗四:JavaSocket 程式設計
1、Java Socket程式設計
2、Java和密碼學:參考http://www.cnblogs.com/rocedu/p/6683948.html
3、編寫有理數/複數計算器
4、遠端有理數計算器
5、遠端複數計算器
6、實驗報告
20202323 實驗四 《資料結構與面向物件程式設計》實驗報告 - 20202323蒙思洋 - 部落格園 (cnblogs.com)
實驗五&六:線性結構與連結串列
1、連結串列練習,要求實現下列功能:通過鍵盤輸入一些整數,建立一個連結串列;這些數是你學號中依次取出的兩位數。 再加上今天的時間。列印所有連結串列元素, 並輸出元素的總數。
2、連結串列練習,要求實現下列功能:實現節點插入、刪除、輸出操作;繼續你上一個程式, 擴充套件它的功能;從磁碟讀取一個檔案,完成相關操作。
3、連結串列練習,要求實現下列功能:用氣泡排序法或者選擇排序法根據數值大小對連結串列進行排序;
4、在android上實現實驗(1)和(2)
5、在android平臺上實現實驗(3)
20202323《資料結構與面向物件程式設計》實驗五和六報告 - 20202323蒙思洋 - 部落格園 (cnblogs.com)
1、定義一個Searching和Sorting類,並在類中實現linearSearch,SelectionSort方法,最後完成測試。
2、重構你的程式碼
3、把Sorting.java Searching.java放入 cn.edu.besti.cs2023.(姓名首字母+四位學號) 包中(例如:cn.edu.besti.cs1823.G2301)重新編譯,執行程式碼,提交編譯,執行的截圖(IDEA,命令列兩種)
4、參考http://www.cnblogs.com/maybe2030/p/4715035.html,學習各種查詢演算法並在Searching中補充查詢演算法並測試
5、實現排序方法等(至少3個)測試實現的演算法(正常,異常,邊界)
6、編寫Android程式對實現各種查詢與排序演算法進行測試
20202323 蒙思洋 2021-2022-1 《資料結構與面向物件程式設計》實驗七報告 - 20202323蒙思洋 - 部落格園 (cnblogs.com)
1、參考教材PP16.1,完成鏈樹LinkedBinaryTree的實現,自己編寫驅動類對自己實現的LinkedBinaryTree進行測試。
2、基於LinkedBinaryTree,實現基於(中序,先序)序列構造唯一一棵二㕚樹的功能
3、對自己實現的功能進行測試。
4、自己設計並實現一顆決策樹提交測試程式碼執行截圖,要全屏,包含自己的學號資訊課下把程式碼推送到程式碼託管平臺
5、輸入中綴表示式,使用樹將中綴表示式轉換為字尾表示式,並輸出字尾表示式和計算結果
20202323 《資料結構與面向物件程式設計》實驗八報告 - 20202323蒙思洋 - 部落格園 (cnblogs.com)
1、初始化:根據螢幕提示(例如:輸入1為無向圖,輸入2為有向圖)初始化無向圖和有向圖(可用鄰接矩陣,也可用鄰接表),圖需要自己定義(頂點個數、邊個數,建議先在草稿紙上畫出圖,然後再輸入頂點和邊數)
2、圖的遍歷:完成有向圖和無向圖的遍歷(深度和廣度優先遍歷)
3、 完成有向圖的拓撲排序,並輸出拓撲排序序列或者輸出該圖存在環
4、完成無向圖的最小生成樹(Prim演算法或Kruscal演算法均可),並輸出
5、完成有向圖的單源最短路徑求解(迪傑斯特拉演算法)
20202323 實驗九《資料結構與面向物件程式設計》實驗報告 - 20202323蒙思洋 - 部落格園 (cnblogs.com)
程式碼託管連結
-
給出statistic.sh的執行結果,統計本學期的程式碼量。
總計:5317行
課程收穫或不足
課程收穫:學習java最大的收穫就是對java這門語言以及資料結構的框架有了一個大概的瞭解,讓我知道了程式設計帶來的許多好處。而且通過學習這門課,極大的加強了我的自學能力,
王老師上課對演算法和結構進行一個統一的講解,而程式碼就靠我們自學。最開始感覺程式設計難度太大了,完全無從下手,在慢慢的學習和嘗試之後,通過詢問同學,和上CSDN查閱程式碼之後,
稍微能自己編寫一點程式碼,最終體會到了學習java的樂趣。
不足:平時寫的程式碼較少,程式設計能力還是太差,不能自己一個人獨立寫一個比較複雜的程式。