作者:lalalouye(20172329王文彬)
2018-2019年大二Java程序設計與數據結構課程總目錄:第一週 第二週 第三週 第四周 第五週 第六週 第七週 第八週 第九周 實驗一 實驗二 實驗三 Java哈夫曼編碼實驗
20172329 2018-2019《Java程序設計與數據結構》課程總結
又過了一個學期的Java課程的學習,數據結構的瞭解也隨着這學期的學習逐漸變得深入,自己的編碼水平也得到了一些提升,雖然這學習在學習Java的過程中發生了一些意外,發現自己在學習一些知識的細節點的時候,理解會出現一些問題導致自己在後面的幾次做題中發生了滑鐵盧,因此發現學習編程並不是只需要會編程,理論指導實踐這句話是沒錯的。加油!
每週作業鏈接彙總
- 第一週總結
- 初步接觸軟件開發與數據結構的基本內容,瞭解到軟件=程序+軟件工程,同時學習到如何對於算法效率進行分析,大O記法的表示,時間複雜度的學習,其中時間複雜度的分析爲重點!
- 第二週總結
- 在第二週,接觸到了在上學期在四則運算變成中涉及的一個數據結構,棧——先進後出的數據結構,在這一章我們不僅僅需要學會用棧,而且還用之前學習的數組與鏈表進行對於棧的實現
- 第三週總結
- 在第三週學習了一種新的數據結構——隊列,先進先出的一種數據結構,同時運用數組和鏈表進行對於隊列進行實現,同時學習了雙端隊列,循環數組。
- 第四周總結
- 在第四周學習了對於列表數據結構的學習,運用數組和鏈表進行實現,
- 第五週總結
- 學習了多種排序和查找算法,並進行運用之前學過的方法進行重新編寫,並且運用到例子中。
- 第六週總結
- 瞭解了樹這一種數據結構,這是我們接觸的第一個非線性數據結構。
- 第七週總結
- 學習了樹這種數據結構中的一個特例,二叉查找樹,並運用之前學習的知識對其進行實現。
- 第八週總結
- 學習了優先隊列和堆的相關知識,並運用之前的方法對其進行實現。
- 第九周總結
- 學習了圖的相關知識,並且瞭解了很多種算法,比如Prim算法,Dijkstra算法。
THE BEST AND THE MOST
自認爲寫得最好一篇博客是?爲什麼?
- 在這學期新的一學期對於編程的學習,讓我更加瞭解到編程的魅力,自己可以寫一些自己想寫的東西,而且我覺得其實在編程的過程更像是一種在描繪自己世界的狀態,因爲當我們充分處於自己的邏輯世界中,發現自己就是這一片地方的霸主,很多在如今我們在想盡辦法改變的規則,比如在玩遊戲中我們就是開發者,不需要去花錢去玩,自己就可以體驗到很棒的體驗,或者又是因爲自己能力如今的還不是很熟練,就覺得還有很多地方可以探索,懷揣着這份興趣感,所以更要加油,既然要選出一篇自我感覺最好的博客,我覺得應該是這一篇:2018-2019-20172329 《Java軟件結構與數據結構》第五週學習總結
- 這篇博客是在學習排序和查找這一章節以後所寫的,這一章的內容很多,而且很多知識點也很難理解,這一週我是花了很多時間去學習這一章節的,因爲查找算法的編寫,一些很容易就可以理解,但是還有一些算法始終在一部分就很讓我感覺到學習過程很困難,我也是找了很多資料和老師之前給我們的網站進行動態圖的理解從而理解這些排序和查找算法,因爲當我們搞懂這些算法的原理的時候,也就是當我們邏輯變得清晰的時候,往往在編寫代碼的時候就會變得容易。
作業中閱讀量最高的一篇博客是?談談經驗
- 在這學期中,我的作業中閱讀量最多的是:2018-2019-20172329 《Java軟件結構與數據結構》第一週學習總結.
閱讀量有94次。
爲什麼閱讀量會有94次呢,其中因爲博客園本身對於這個次數的計算,我自己的閱讀量也會算進去,並且重複閱讀也會將這個次數增加,因此,博客的閱讀量本身就存在一定的可刷性,但我的確沒有刷,然後呢,我覺得還有可能因爲方式提交的比較早,所以大家都有個習慣,看到有人在很早發佈就會去看看,第二天發現還是很少人,就在看一遍,慢慢閱讀量就上去了,另一個原因可能因爲第一篇的排版以及內容比較充實,簡單易懂。
實驗報告鏈接彙總
- 實驗一報告
- 關於在之前學習的幾種數據結構的熟悉以及對於學習過的排序算法的運用。
- 實驗二報告
- 對於樹這一種數據結構的深入學習,包括瞭如何去建立一顆二叉樹,決策樹,以及對於紅黑樹代碼的分析以及算法的理解。
- 實驗三報告
- 對於查找算法以及排序算法的再理解以及新的幾種算法的補充以及實現。
- 哈夫曼編碼實驗
- 關於哈夫曼樹的建立以及通過哈夫曼樹進行編碼並且對於一段文檔進行加密的實現。
團隊項目報告鏈接彙總(烏諾紙牌)
- 第一週:
- 團隊介紹;
- 團隊任務立項;
- 團隊任務分配;
- 採訪學長經驗;
- 需求說明書;
- 《團隊作業第一週》五小福團隊作業——UNO
- 第二週:
- 修改完善上週提交的需求規格說明書;
- 團隊的編碼規範;
- 團隊項目的數據庫設計及相應ER圖;
- 項目的後端架構設計;
- 團隊分工;
- TODOList及燃盡圖;
- 本次分工及工作量比例;
- 《團隊作業第二週》五小福團隊作業——UNO
- 衝刺周:
- 《團隊作業第三、第四周》五小福團隊作業--Scrum 衝刺階段--Day1--領航
- 《團隊作業第三、第四周》五小福團隊作業--Scrum 衝刺階段--Day2
- 《團隊作業第三、第四周》五小福團隊作業--Scrum 衝刺階段--Day3
- 《團隊作業第三、第四周》五小福團隊作業--Scrum 衝刺階段--Day4
- 《團隊作業第三、第四周》五小福團隊作業--Scrum 衝刺階段--Day5
- 《團隊作業第三、第四周》五小福團隊作業--Scrum 衝刺階段--Day6
- 《團隊作業第三、第四周》五小福團隊作業--Scrum 衝刺階段--Day7
代碼託管鏈接:碼雲鏈接:20172329王文彬
statistic.sh的運行結果:
加點代碼,改點代碼是理解的最好方式,參考編程的智慧,談談你的心得
- 每一次看都有每一次的體會,去年看了這片文章後,醍醐灌頂,這讓我想起了之前同學說的一句話,是你寫了10000行代碼還是把1行代碼重複了10000遍,我覺得這句話說的真的非常棒,說決定一個程序員能力水平的是代碼量,其實也沒有什麼問題,就像在學習英語過程中,詞彙量是一個很大的坎,但是程序之所以區別於其他學科,因爲它的可重複性很高,或者就是一個人真實的編碼水平其實假如不讓他去寫程序,能力只有他自己知道,學習是一個持久的過程,假如一昧靠資質,就會成爲傷仲永的故事,編碼本身就是一個長期學習的過程,程序員本身就是一個很耗神的工作,所以我們要學會自己去寫一些代碼,用自己的方法,或者真正去理解代碼的邏輯。
積極主動敲代碼做到沒?教材實踐上有什麼經驗教訓?
- 這學期我覺得我很明顯的一個改變,一旦老師佈置一個實踐任務,不再像是過去一樣,發現一無所知就去看別人的博客,自己的自我思考過程是一個非常幸福的時刻,當一個人去體驗思考的過程的時候是幸福的。
- 很幸運自己在這學期可以用自己所學去完成一些項目或者大作業,也得到了一些肯定。
課堂項目實踐
- 時間複雜度分析
:時間複雜度分析,用大O記法寫出時間複雜度。 - ArrayStack的實現和測試:完成課本中ArrayStack類的實現,特別是完成peek、isEmpty、size和toString方法的實現,並完成四個方法的測試。
- 鏈表插入:寫出鏈表中節點插入的操作代碼。
- 鏈表實踐:鏈表練習,要求實現下列功能:
(1)通過鍵盤輸入一些整數,建立一個鏈表
(2)實現節點插入、刪除、輸出操作
(3)使用冒泡排序法或者選擇排序法根據數值大小對鏈表進行排序 - 第四章代碼檢查:運行PP28,PP28頁的程序,根據個人學號輸入後綴表達式並計算。
- LinkedStack補全:給出size、isEmpty和toString等方法的定義,以完成LinkedStack
類的實現。 - 第五章代碼檢查-凱撒密碼:代碼檢查P72-P73,凱撒密碼程序。
- 楊輝三角:使用循環隊列輸出楊輝三角。
- 棧隊列測試
- 第六章代碼檢查:運行PP6.8和PP6.11的程序
- 線性表實踐:定義一個商品類Product,需要包括商品名稱、價格等信息,使用鏈式存儲結構實現一個線性表,存儲商店中的商品。
支持插入、刪除、選擇排序、查找等功能,並進行簡單測試。 - ASL測試:已知線性表具有元素{5,13,19,21,37,56,64,75,80,88,92},如果使用折半查找法,ASL是多少?
- 三種查找算法練習
- 哈希衝突處理實踐:把自己的學號加21,例如學號爲1,把22添加到序列後面,使用鏈地址法,解決衝突。
編程實現,並測試。 - 希爾排序測試
- 樹計算題:計算題:
1.有1023個結點的完全二叉樹,其高度是多少?葉結點數是多少?
2.高度爲h的完全二叉樹至少有多少個結點?至多有多少個結點? - 樹的深度和葉子個數計算:計算課本中背部疼痛診斷器中決策樹的葉子節點個數?根據課堂介紹的遞歸樹深度計算算法,計算決策樹的深度。
- 中序和先序計算二叉樹結構:若已知中序和先序序列,計算二叉樹結構
- 層次遍歷法實踐:(1)使用遞歸實現層次遍歷背部疼痛決策樹,並按照層次順序輸出每個節點內容。
(2)非遞歸的層次遍歷法算法如下:
根結點入隊;
從隊頭取元素, 並執行如下3個動作:
(1)訪問該結點;
(2)如果該元素有左孩子,則左孩子入隊;
(3)如果該元素有右孩子,則右孩子入隊;
重複執行上述過程,直至隊列爲空。 此時,二叉樹遍歷結束。
按照上述算法,編程實現層序遍歷,按照層序的方法,遍歷並依次輸出每個節點內容。 - 堆構造與排序:根據關鍵字序列:36,30,18,40,32,45,22,50,構造一顆小頂堆,並排序?
- 堆排序測試:根據關鍵字序列:36,30,18,40,32,45,22,50,利用數組構造一顆大頂堆,並排序。
- 十字鏈表練習:畫出十一鏈表結構。
- 最小生成樹:1.畫出Prim算法的最小生成樹的生成過程
2.畫出Kruscal算法的最小生成樹的生成過程
3.計算最小權值 - Dijkstra(迪傑斯特拉)算法測試:使用Dijkstra(迪傑斯特拉)算法計算單源(V1出發)最短路徑。
- AOE練習:1、求關鍵路徑,v1和ve的值並寫出具體步驟
2、畫出圖一可能的拓撲序列
3、畫出圖二所示無向圖的鄰接矩陣、鄰接鏈表,並列出深度優先和廣度優先遍歷圖所得的頂點序列。
4、寫出圖三的鄰接矩陣,並用prim算法求最小生成樹,畫出產生過程 哈夫曼編碼測試:設有字符集:S={a,b,c,d,e,f,g,h,i,j,k,l,m,n.o.p.q,r,s,t,u,v,w,x,y,z}。
給定一個包含26個英文字母的文件,統計每個字符出現的概率,根據計算的概率構造一顆哈夫曼樹。
並完成對英文文件的編碼和解碼。- 課堂實踐對提高應用能力有幫助嗎?
- 相比於寫博客,我更喜歡課堂實踐,因爲它不僅僅可以讓我們對於知識的理解變得更加深刻,還可以讓我們對於知識點的理解更加清晰,因爲讓一個知識點變得熟練的過程就是實踐和聯繫的過程。同時還可以學習到新的東西,加強自己的自我動手能力。
- 課堂實踐上自己有什麼經驗教訓?
- 一是,一定在課堂上要跟上老師的思路,同時自己一定要理清邏輯,程序設計本身就是一個考驗邏輯的學科,如果在課上連原理聽的都覺得很暈,編程就更加困難了;二是,在不知道自己到底會不會的時候一定要先進行自我的思考,否則直接看別人的代碼或者直接去查資料會讓自己以爲自己會了,其實什麼都不懂。
- 課堂實踐上對老師有什麼教學建議?
- 與上學期的建議相同,我建議老師可以分層次佈置作業,按能力分配課堂上所要完成的任務,避免成績好的人早早做完沒事幹,學習差的人又久久不能做出來,帶最後又發生抄襲代碼甚至抄襲截圖的情況。二是,我認爲可以將博客作業的比重降下來,或者基於實踐作業的難度再佈置博客作業,因爲很多人在兩個事情的時間分配存在很大的問題,因此假如沒有能力的人肯定會先寫博客,但是博客又不知道寫什麼就開始胡編,所以沒有什麼意義!!!!!!!!!!!!!!!!!!!!!!!!我希望可以被看到!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
課程收穫與不足
自己的收穫
- 新的一學期,自己補充了上學期沒有搞明白的一些知識點,也學到了很多新的知識,其實我覺得這一學期發現,分數是小事,最重要的是自己可以學到東西,讓自己忙起來,我相信一句話飽足思淫慾,所以要讓自己的慾望慢慢降下來,安心下來,做一些值得的事情,和要好的朋友多玩玩,看到吸引自己的知識就安心學一學,讓自己的生活變得簡單一點,讓自己變得不簡單一些。
自己需要改進的地方
- 不足,我覺得就是自己很容易浮躁,情緒很不穩定,因爲這學期事情很多,在事情非常多的時候,時間很難按照自己所計劃的進行,就所謂計劃趕不上變化,但是每當這個時候我自己就很覺得對不起自己,就辜負自己了,所以自己的情緒就會很容易失控。
結隊學習是不是真正貫徹了?
- 這個學期的結隊學期相比遇上學期提高不少,大家的關係更加熟悉,然後大家的能力也彼此心知肚明,所以在團隊分工上面非常明細,有問題及時討論,效率也都提高不少,在這學期也學到很多團隊工作的核心。
問卷調查
- 你平均每週投入到本課程有效學習時間有多少?
- 每週平均每天可能由5個小時,一週差不多保持在25-30個小時左右的時間進行學習。
- 每週的學習效率有提高嗎?你是怎麼衡量的?
- 學習效率是不相同的,因爲到了大二,時間的分配需要偏重,但沒有全部投入,時間對於這學期的我是非常珍貴的資源,所以我非常珍惜,如何去衡量在這學期的學習效率,通過我隨身背書包帶電腦的時間就可以知道,我的電腦幾乎是不離身的,所以不僅僅是學習,還有工作。
- 藍墨雲班課的使用對你的學習有促進嗎?有什麼建議和意見嗎?
- 藍墨雲在這學期沒有發揮出他應當發揮出的能力,我們不能夠及時知道自己在課堂實踐得到的分數,再是假如給予我們扣分也沒有表面我們到底出現錯誤在哪裏,所以我覺得存在很大問題!!!!!!!!!!!!!!!!!!!!!!!
- 你覺得這門課老師應該繼續做哪一件事情?
- 課堂實踐,可以提高我們的能力。
- 你覺得這門課老師應該停止做哪一件事情?
- 繁瑣複雜的博客,並不是取消,但可以讓學生瞭解到寫博客是爲了自己學習過程的記錄而不該成爲評比的對象,導致我們這學期在博客總結上大家對於知識點的總結越寫越多。
- 你覺得這門課老師應該開始做什麼新的事情?
- 假如在課堂有空餘時間,我建議可以讓學生在斷網的情況下,進行自我編碼,測試水平。
任意發揮
- 計算機知識的學習還有很多,我希望自己可以安下心來,學習更多知識,讓自己以後能夠在社會中有一技之長。