20172308 2018-2019-1《程序設計與數據結構》課程總結

每週做業連接彙總

第一週做業:算法分析
第二週做業:集合概述、鏈式結構——棧
第三週做業:隊列
第四周做業:列表
第五週做業:排序與查找
第六週做業:樹
第七週做業:二叉查找樹
第八週做業:優先隊列與堆
第九周做業:圖html

自認爲寫得最好一篇博客是?爲何?

  • 我本身認爲寫的最好的一篇博客是——第五週做業:排序與查找
    java

  • 我以爲寫博客的目的應該是對課本知識的預習,編寫代碼並記錄問題提醒本身,總結課本並鞏固的一個過程。而我認爲我在這篇博客裏都作到了算法

  • 首先是預習:這章的知識點梳理是我在課前就看完課本並敲進來的,並且對於一些概念的定義加以本身的理解,並百度了相關的動圖加以形象的解釋數據庫

  • 而後是教材知識上的問題解決:在閱讀課本知識的過程當中遇到的問題,小的問題已經在知識梳理的過程當中加入進去。可能幾句話說不清楚的問題因而就放在了這裏:
    例如,課本上並無對歸併排序的後半部分合並作詳細的說明,而後經過百度等方法補充這一點,也讓本身理解的更加透徹;
    再好比關於課本上冒泡排序只講了一個常規操做,從一邊按升序或降序冒泡,在百度相關資料的同時,發現了還有其餘變形的冒泡算法,因而也補充在博客裏,這也是對本身的一個思考:課本上可能有不少算法都有其餘的實現方式,而缺少本身的思考,一味的照着課原本,會限制本身的想象編程

  • 還有代碼的運行問題:這一次的博客由於有充足的時間去完成,因此對出現的第一個問題有了想要一探究竟的客觀條件,也找到了兩種解決方法的思路,也有了與同窗深刻交流的時間。
    第二個問題雖然是個小問題,百度一下就能夠找到解決辦法,可是仔細看了一下結果,又會發現新的問題「 排好序的列表排序的時間甚至比沒排好序的列表花費的時間還要多 」,雖然這個問題如今還沒找到答案數組

  • 最後是博客互評:仔細看完了互評夥伴的博客,也確實學到了東西,好比編程實現的其它方法,界面排版,說明問題的方式等等;
    並評論、記錄在了博客裏,數據結構

做業中閱讀量最高的一篇博客是?談談經驗

  • 做業中閱讀量最高的一篇博客是——實驗三《程序設計與數據結構》查找與排序app

  • 這篇博客應該是我博客問題記錄當中記錄的最詳細的一篇了
    包括兩個小小問題:雖然很簡短,但有的時候就會卡在這種想不起來或者本身沒有掌握,又或者容易讓人忽略的小問題上。不放過每個問題,這種嚴謹的態度也應該是咱們之後學習過程當中要增強的
    還有就是對待學習應該相信本身的思考判斷出來的結果,就算是錯誤的也能從中學到東西,然而有的時候別人給的也不必定就是對的,就像此次給的參考博客裏的參考代碼就存在問題,因而在博客裏寫下了這個問題編程語言

  • 博客交的早,加上其餘同窗們對學習的熱情也佔據了很大的緣由工具

實驗報告連接彙總

實驗一《程序設計與數據結構》線性結構
線性結構之鏈表(1):經過鍵盤輸入一些整數,創建一個鏈表,打印全部鏈表元素, 並輸出元素的總數。
線性結構之鏈表(2):實現節點插入、刪除、輸出操做,擴展功能,從磁盤讀取一個文件,從鏈表中刪除剛纔的數字1. 並打印全部數字和元素的總數。
線性結構之鏈表(3):使用選擇排序法根據數值大小對鏈表進行排序,在排序的每個輪次中, 打印元素的總數,和目前鏈表的全部元素。
線性結構之數組(4):經過鍵盤輸入一些整數,創建一個數組,打印全部數組元素, 並輸出元素的總數;實現數組插入、刪除、輸出操做, 擴展功能,從磁盤讀取一個文件,從鏈表中刪除剛纔的數字1. 並打印全部數字和元素的總數。
線性結構之數組(5):使用選擇排序法根據數值大小對數組進行排序,在排序的每個輪次中, 打印元素的總數,和目前數組的全部元素。

實驗二《程序設計與數據結構》樹
(1)樹之實現二叉樹:完成鏈樹LinkedBinaryTree的實現(getRight,contains,toString,preorder,postorder),並測試
(2)樹之中序先序序列構造二叉樹:基於LinkedBinaryTree,實現基於(中序,先序)序列構造惟一一棵二㕚樹的功能,並測試
(3)樹之決策樹:本身設計並實現一顆決策樹
(4)樹之表達式樹:輸入中綴表達式,使用樹將中綴表達式轉換爲後綴表達式,並輸出後綴表達式和計算結果(若是沒有用樹,則爲0分)
(5)樹之二叉查找樹:完成PP11.3
(6)樹之紅黑樹分析:參考相關資料對Java中的紅黑樹(TreeMap,HashMap)進行源碼分析,並在實驗報告中體現分析結果

實驗三《程序設計與數據結構》查找與排序
查找與排序-1:定義一個Searching和Sorting類,並在類中實現linearSearch, SelectionSort方法
查找與排序-2:重構代碼
查找與排序-3:參考http://www.cnblogs.com/maybe2030/p/4715035.html 在Searching中補充查找算法並測試
查找與排序-4:補充實現課上講過的排序方法
查找與排序-5:編寫Android程序對各類查找與排序算法進行測試

團隊項目報告連接彙總

代碼託管連接

給出statistic.sh的運行結果,說明本學期的代碼量目標達到沒有?

加點代碼,改點代碼是理解的最好方式,參考編程的智慧,談談你的心得

* 反覆推敲代碼 *

有些人喜歡炫耀本身寫了多少多少萬行的代碼,彷彿代碼的數量是衡量編程水平的標準。然而,若是你老是匆匆寫出代碼,卻歷來不回頭去推敲,修改和提煉,實際上是不可能提升編程水平的。你會製造出愈來愈多平庸甚至糟糕的代碼

做爲一個學過編程語言的人,我也知道寫出好的代碼很重要,但直到看到編程的智慧裏關於反覆推敲代碼重要性的描述,我才真正意識到它的重要性。

老師的要求是一學期五千行的代碼,而我一直認爲只要代碼量達標了就能夠了。甚至有的同窗一學期就達到了萬行左右。回想初觸Java時,老師問過的一個問題「你以爲一學期五千行代碼是否太多了」。這麼一看好像沒有人沒達標,這個標準也不是很高。知道看到這個題目我才意識到五千行的代碼不該該是第一次敲上去的、能夠運行的、沒有代碼錯誤組成的程序,而應該是反覆推敲的代碼:簡潔易懂,不重複囉嗦。

而更讓我獲得學習的是:反覆推敲,兩次不是反覆,三次不是,四次不是,五次。。。這應該是一個不斷學習的過程,每一次在新的學習當中都會有新的收穫,回頭看之前的代碼都會有新的感覺,新的方法實現。

* 寫可讀的代碼 *

有些人覺得寫不少註釋就可讓代碼更加可讀,然而卻發現事與願違。註釋不但沒能讓代碼變得可讀,反而因爲大量的註釋充斥在代碼中間,讓程序變得障眼難讀。並且代碼的邏輯一旦修改,就會有不少的註釋變得過期,須要更新。修改註釋是至關大的負擔,因此大量的註釋,反而成爲了妨礙改進代碼的絆腳石

這也是讓我獲得反思學習的地方。之前在寫代碼時,包括看別人代碼時都會把每一句代碼加上註釋,甚至新建了一個變量我都會加行註釋說明它是用來幹嗎的。雖然這樣確實讓人能看懂,可是忽略的一點是其實有些註釋不加別人也能知道什麼意思,畢竟都是學編程語言的。如今是初始階段,因此並不會有常常修改代碼邏輯的狀況。但確實是之後發生這種狀況,代碼註釋將變成了累贅。而咱們如今其實就應該培養這種意識,在恰當的地方加入註釋

還有這一部分裏提到的關於變量名的命名應該儘可能表達變量的用途,局部變量應當儘可能靠近它所被用的地方等等都應該是我之後要注意的地方(之前看別人的代碼都是講聲明的變量統一放在開頭,以爲看起來很好看,卻歷來沒想過要把它放在易讀的地方)

善於提出方法代碼也是很須要注意的地方。有的時候確實爲了要獲得某個值或其它的會寫一長串的代碼去獲得它,其實也徹底能夠把它提取出來寫成方法直接調用,這樣不只在其餘的地方能夠用,也使代碼更簡潔,更易讀

積極主動敲代碼作到沒?教材實踐上有什麼經驗教訓?

說實話,我並無作到積極主動敲代碼。
就像上面所說的,代碼的質量方面,沒有作到反覆推敲代碼,我寫出來的代碼甚至沒有過二次修改,只要運行結果達到目的就算完成任務了。然而上面也分析了,這樣是不對的。代碼的可讀性也確實不高,除了本身估計別人也讀不懂。因此在這方面本身還須要端正態度,提升興趣,作到積極主動,寫出好代碼。

代碼的數量方面,固然代碼量是達標了,可是仔細反思一下,這裏的代碼量應該是積極主動編寫或嘗試更多程序,提高本身敲代碼能力的代碼量。好比課本後面除了做業要求之外的程序編寫,或者同一個程序不一樣代碼的實現。這樣反覆鍛鍊本身代碼能力的,才應該是真正作到積極主動。我也在這裏反思,這些也應該是我要作到的,而且在之後的學習過程當中這樣要求本身

教材實踐上固然也有過教訓。代碼能力不足固然是直接反映在代碼編寫上。不熟悉的一些代碼就不容易想到也不容易理解,因此在寫到楊輝三角此次實踐的代碼時,因爲沒有理解好所用的方法,以及內在的邏輯致使本次實踐沒能完成

課堂項目實踐

參考2018-2019-1 《Java 程序設計》課堂實踐項目

  • 實踐一:時間複雜度分析

  • 實踐二:完成課本中ArrayStack類的實現,特別是完成peek、isEmpty、size和toString方法的實現,並完成四個方法的測試。

  • 實踐三:寫出鏈表中節點插入的操做代碼(僞代碼)

  • 實踐四:鏈表練習,要求實現下列功能
    (1)經過鍵盤輸入一些整數,創建一個鏈表
    (2)實現節點插入、刪除、輸出操做
    (3)使用冒泡排序法或者選擇排序法根據數值大小對鏈表進行排序

  • 實踐五:運行PP28,PP28頁的程序
    根據我的學號輸入後綴表達式並計算

  • 實踐六:給出size、isEmpty和toString等方法的定義,以完成LinkedStack類的實現。
    1.可以運行
    2.須要測試各個方法
    3.把代碼上傳到碼雲,並將關鍵代碼和運行結果截圖加水印(學號)上傳

  • 實踐七:代碼檢查P72-P73
    凱撒密碼程序。
    把結果截圖,加學號水印,上傳到藍墨雲

  • 實踐八:使用循環隊列輸出楊輝三角
    (1)用數組實現循環隊列(要考慮擴容問題,不然不加分)
    (2)輸出楊輝三角
    (3)代碼運行結果添加學號水印,並上傳;代碼傳到碼雲,附上碼雲連接

  • 實踐九:棧隊列測試題

  • 實踐十:運行PP6.8和PP6.11的程序

  • 實踐十一:定義一個商品類Product,須要包括商品名稱、價格等信息,使用鏈式存儲結構實現一個線性表,存儲商店中的商品。
    支持插入、刪除、選擇排序、查找等功能,並進行簡單測試

  • 實踐十二:已知線性表具備元素{5,13,19,21,37,56,64,75,80,88,92} 若是使用折半查找法,ASL是多少?

  • 實踐十三:畫出存儲形式和asl的計算

  • 實踐十四:把本身的學號加21,例如學號爲1,把22添加到序列後面,使用鏈地址法,解決衝突。編程實現,並測試
    要求計算asl,輸出衝突次數

  • 實踐十五:當D2等於2時,第2趟排序結果是?

  • 實踐十六:計算題
    1.有1023個結點的徹底二叉樹,其高度是多少?葉結點數是多少?
    2.高度爲h的徹底二叉樹至少有多少個結點?至多有多少個結點?
    3.已知一棵度爲m的樹中有n1個度爲1的結點,n2個度爲2的結點,…,nm個度爲m的結點,問該樹中有多少個葉結點?

  • 實踐十七:參考葉子節點計算的僞代碼,計算課本中背部疼痛診斷器中決策樹的葉子節點個數?

  • 實踐十八:若已知中序和先序序列,計算二叉樹結構
    根據課堂介紹的遞歸樹深度計算算法,計算決策樹的深度

  • 實踐十九:使用遞歸實現層次遍歷背部疼痛決策樹,並按照層次順序輸出每一個節點內容。

  • 實踐二十:根據關鍵字序列:36,30,18,40,32,45,22,50,構造一顆小頂堆,並排序?畫出構造堆過程(樹+數組)

  • 實踐二十一:根據關鍵字序列:36,30,18,40,32,45,22,50,利用數組構造一顆大頂堆,並排序

  • 實踐二十二:使用Dijkstra(迪傑斯特拉)算法計算單源(V1出發)最短路徑

  • 實踐二十三:AOE練習

  • 哈夫曼樹實踐
    給定一個包含26個英文字母的文件
    統計每一個字符出現的機率,根據計算的機率構造一顆哈夫曼樹
    並完成對英文文件的編碼和解碼

課堂實踐對提升應用能力有幫助嗎?

這個無疑確定是有用的。實踐就是鍛鍊檢測咱們代碼編寫能力的一種方式,就像一些編程比賽同樣,給了題目本身去思考,可以鍛鍊本身的代碼編寫的綜合實力,也能拓展本身的思路,找到更好的實現方法

課堂實踐上本身有什麼經驗教訓?

就像上面舉例的楊輝三角,對課本知識不深刻理解,不熟練運用,就很難寫出代碼

課堂實踐上對老師有什麼教學建議?

實踐是頗有必要的,建議是關於實踐的時間設置
這個主要是根據老師判斷實踐難易設置,也能夠稍稍參考大部分同窗們對實踐時間的見解,以及在給定時間內同窗們的完成度

課程收穫與不足

本身的收穫

這學期投入在Java上的時間應該也是很是多的,大部分的時間都用來看課本,寫博客,編程序。學到了更多的數據結構相關的專業知識。代碼的編寫能力有了必定的提高。最主要的是明白了自主學習的重要性。如今的我已經認識到了之前抱怨過不少知識沒有學過回去用它有點愚蠢,如此龐大的計算機知識不可能期望老師給咱們教完,必定要依靠本身主動去學,才能學到更多的知識

其實收穫最大的應該是自我學習,還有團隊合做。最集中地表如今最後的大實踐做業上。從一開始咱們覺得的不可能作出來什麼能用的app或遊戲。可是在一步步去作的過程中,咱們團隊自主學習那些須要用到的卻沒學過的知識,好比界面UI設計,數據庫等知識。遇到很困難的問題,團隊也能互相討論,互相學習,而後解決問題。

本身須要改進的地方

在實踐的過程當中發現,基礎知識不是很牢固,須要不斷的去使用去回憶

花了不少的時間學習Java,可是說到效率的話仍是不夠高的。尤爲是參考了《編程的智慧》以後,對比本身用在Java 上的時間並無達到理想的效果,寫出的代碼也沒有很高的質量。之後在代碼質量方面要多下功夫

在學習Java的過程當中容易出現疲憊的內心,之後須要端正本身的態度,時刻以飽滿的熱情去學習Java才能達到最好的效果

遇到問題會出現逃避思想,老是想直接百度而不先思考,這是一個之後必定要改進的地方

結對學習是否是真正貫徹了?寫一下你提供的幫助或接受了什麼幫助,並對老師提供參考建議

在學習過程當中是遇到過不少問題,可是大部分問題都是經過百度解決的,並無刻意的去找結對夥伴討論問題。可是共同窗習仍是有的,在學習課本過程當中,部分不懂的知識點從侯澤洋同窗那裏獲得了不少幫助,編程過程當中也從侯澤洋同窗那裏學到解決問題的不一樣的方法。
好好利用結對學習對促進雙方學習有很大的幫助做用,只是有的時候執行的狀況可能有些不夠。若是同窗們造成了重視結對學習的意識,必定會取得很好的效果。若是沒有足夠的重視,可能還須要老師的督促來幫助咱們重視起來。按期反饋結對學習狀況可能會起些做用。

問卷調查

你平均每週投入到本課程有效學習時間有多少?

一天保證兩小時以上,週末三小時左右,一週16個小時左右

每週的學習效率有提升嗎?你是怎麼衡量的?

根據每週學習內容,編程的難易程度投入的精力就會不同。這應該就是個人衡量標準,若是本週內容相對較難,我投入的時間和精力就相對更多。每週的學習效率提升的話可能就是根據所學內容難易上下波動

藍墨雲班課的使用對你的學習有促進嗎?有什麼建議和意見嗎?

促進做用主要體如今督促咱們的學習上:每週的做業發佈、測試、點名、搶答等,藍墨雲的做用仍是很大的,很是的方便。
實踐做業的評測以後還有評論,也能幫助咱們瞭解到哪裏出現了錯誤,對咱們的學習也有很大的促進做用

每週還會提醒我經驗排名升降狀況,這個原本應該是有必定的警示做用的,但由於這個經驗的組成除了平時的測驗、實踐經驗,還包括了老師發佈資源的閱讀獲得的經驗。因此這個排名並無獲得較大的重視

因此建議一就是:
將資源的閱讀經驗獨立出來(或者賦爲0),好讓這個排名更有參考意義

建議二:
上學期老師有刻意讓咱們使用裏面的問題討論功能,可是由於沒人討論才荒廢下來了(固然你們確定仍是有問題的)
因此若是能重拾這個功能仍是挺好的,具體建議的話,仍是要有人帶頭使用,引發你們的積極性

你以爲這門課老師應該繼續作哪一件事情?

繼續堅持實踐做業,包括最後的大實踐。我認爲這仍是考察你們綜合實力,提升你們編程興趣,檢測編程水平,促進團隊合做的一件事
博客也應該繼續寫

你以爲這門課老師應該中止作哪一件事情?

博客確實應該繼續寫,由於他對培養咱們記錄問題,解決問題能力是有幫助的
可是博客加分須要再調整一點點

雖然比上學期博客加分已經少不少了,可是,,,一次好的博客都跟一次額外加分的做業同樣的分值了,好比查資料寫博客錄視頻這一項做業,作出來仍是挺麻煩的
固然,博客寫的好這樣的同窗編程實力也必定不會差的

結課感想

學習Java已經兩學期了,而這也是最後一篇課程博客了。
起初接觸Java時,仍是興趣滿滿的。可是編程這種東西涉及的知識真的太廣了,像編程工具就有不少:從一開始的Linux裏的編程,命令行的使用;還沒用好Linux又接觸了IDEA,而後又是Android Studio。要學的東西愈來愈多,老師講的愈來愈少,須要本身百度的愈來愈多。。。

一章接着一章,愈來愈少的時間去花在每一章的鑽研上,固然對Java興趣日下也佔了一部分緣由,讓我不多再主動去學習,去拓展學習。這也應該跟我學習的方式有很大關係,對於喜歡的東西會想去學習它,可是它每每涉及到一個龐大的知識體系,讓本身不知從何下手,難以入門或是長時間入門後又興趣缺缺。也許專一一點,不朝秦暮楚會是解決這種狀況的方法

下學期依然會選相關的課程,但願本身那時能作到專心致志,主動學習,鍥而不捨,一以貫之

總結中涉及到的連接的二維碼

全部博客均可在下方二維碼中掃描得到

相關文章
相關標籤/搜索