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

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

  • 課程:《程序設計與數據結構》
  • 班級: 1723班
  • 姓名: 範雯琪
  • 學號:20172303
  • 教師:王志強
  • 助教:張師瑜/張之睿
  • 必修/選修: 必修

每週做業連接彙總

  • 第一週總結
    • 簡要內容:軟件及數據結構的概述(軟件質量的特徵);算法分析(時間複雜度和空間複雜度)大O記法
  • 第二週總結
    • 簡要內容:ADT;使用數組實現棧;使用鏈表實現棧。
  • 第三週總結
    • 簡要內容:隊列相關概念;用鏈表實現隊列;用數組實現隊列;雙端隊列
  • 第四周總結
    • 簡要內容:列表相關概念(三種類型:有序列表、無序列表、索引列表);用數組實現列表;用鏈表實現列表;在數組中實現刪除某一元素再將其後面的元素分別向前移動一位時應該選擇正序仍是逆序的判斷方法
  • 第五週總結
    • 簡要內容:兩種查找方法(線性查找和二分查找)及其比較;六種排序方法(選擇排序、插入排序、冒泡排序、快速排序、歸併排序和基數排序);查找方法和排序方法的時間複雜度分析泛型方法的使用
  • 第六週總結
    • 簡要內容:樹的相關術語、分類及四種遍歷方法;二叉樹的概念;二叉樹的性質;用數組實現二叉樹;用鏈表實現二叉樹;二叉樹的應用(表達式樹和決策樹);某些狀況下一些方法要先定義一個私有方法再定義一個公有方法來調用它的緣由
  • 第七週總結
    • 簡要內容:二叉查找樹的概念;二叉查找樹的實現前驅結點和後繼結點平衡二叉查找樹的方法;二叉查找樹的應用(AVL樹和紅黑樹);遞歸和迭代的區別
  • 第八週總結
    • 簡要內容:堆的概念;堆的相關操做(構造、插入、刪除);用鏈表實現堆;用數組實現堆;堆排序
  • 第九周總結
    • 簡要內容:圖的概念及分類;廣度優先遍歷(BFS)和深度優先遍歷(DFS)尋找最小生成樹判斷最短路徑圖的實現策略(鄰接列表和鄰接矩陣);。

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

  • 我的以爲本學期寫的最好的一篇博客是第5周學習總結
  • 在寫總結博客的時候把這個學期寫的全部教材內容學習博客都翻了一遍,發現其實我有一個很大的問題就是:教材內容總結寫的多的時候基本問題就寫的少,教材內容總結寫的少的時候問題就寫得相對多。惟一能找到的一篇兩個都寫的比較多的換句話說就是內容比較充實豐滿的可能就是第五篇了。
  • 並且我很清楚地記得當時寫這篇博客的時候,爲了把每一種查找/排序方法的代碼分析和時間複雜度寫出來,那部分的教材被我翻來覆去翻了很久,起碼當時的我能保證那一部分的代碼每一行是幹嗎的我都清清楚楚(如今就不必定了 (:з」∠) )。
  • 除此以外我以爲這篇博客是我全部博客裏最圖文並茂的一篇博客了,當初那些動圖花了好大功夫才找到,如今看起來仍是蠻有成就感的ヾ(๑╹◡╹)ノ"

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

  • 閱讀量最高的一篇博客也是第5周學習總結。經驗的話說實話實在很差意思談,由於本學期個人博客閱讀量都不是很高,可能由於你們廣泛博客都寫的愈來愈好了,並且可能也有我我的的緣由在裏面吧...致使你們主觀上不怎麼想看個人博客。非要說的話可能就像我剛剛在上一部分分析的那樣,首先是博客的內容比較充實,其次這一部分的內容都是一些很抽象的方法,概念看起來也不是很容易理解,但用圖片這種比較直觀的形式來表達就會讓人比較容易理解原理。因此說,當相關教材內容比較抽象難以理解的時候,使用圖文並茂的方式會更方便理解,也會讓本身的博客看起來很美觀,可是圖文並茂的意思是圖片和文字是同等重要的,若是你只放一大堆一大堆看起來很唬人的圖,可是一點本身的理解都沒有,那也不能叫圖文並茂,這就是個人經驗。

實驗報告連接彙總

  • 實驗一 線性結構之數組和鏈表
    • 簡要內容:實現元素的插入、刪除和輸出;使用選擇排序或冒泡排序對元素進行排序。
    • 分別使用數組和鏈表實現如下三個節點:
      • 節點一
        • 經過鍵盤輸入一些整數,創建一個鏈表。
        • 打印全部鏈表元素, 並輸出元素的總數。
        • 在程序中,請用一個特殊變量名來紀錄元素的總數。
      • 節點二
        • 從磁盤讀取一個文件,這個文件有兩個數字。
        • 在實驗一的基礎上實現節點插入、刪除、輸出操做。
      • 節點三
        • 使用冒泡排序法或者選擇排序法根據數值大小對鏈表進行排序(學號是單數,選擇冒泡排序,不然選擇選擇排序)
        • 在排序的每個輪次中,打印元素的總數,和目前鏈表的全部元素。
  • 實驗二 樹的應用
    • 簡要內容:二叉樹、決策樹、表達式樹、二叉查找樹、紅黑樹五種樹的應用。
    • 共設置了六個節點:
      • (一)參考教材P212,完成鏈樹LinkedBinaryTree的實現(getRight,contains,toString,preorder,postorder),用JUnit或本身編寫驅動類對本身實現的LinkedBinaryTree進行測試。
      • (二)基於LinkedBinaryTree,實現基於(中序,先序)序列構造惟一一棵二㕚樹的功能,好比給出先序ABDHIEJMNCFGKL和中序HDIBEMJNAFCKGL,構造出附圖中的樹,用JUnit或本身編寫驅動類對本身實現的功能進行測試。
      • (三)本身設計並實現一顆決策樹。
      • (四)輸入中綴表達式,使用樹將中綴表達式轉換爲後綴表達式,並輸出後綴表達式和計算結果(若是沒有用樹,則爲0分)。
      • (五)完成PP11.3。
      • (六)參考Java Collections API源碼分析對Java中的紅黑樹(TreeMap,HashMap)進行源碼分析,並在實驗報告中體現分析結果。
  • 實驗三 查找與排序
    • 簡要內容:查找方法和排序方法的應用;新的查找方法:插值查找、斐波那契查找新的排序方法:希爾排序、二叉樹排序Linux命令行復習JUnit測試方法複習
    • 共設置了四個節點,一個選作節點:
      • (一)定義一個Searching和Sorting類,並在類中實現LinearSearch(教材P162),SelectionSort方法(P169),最後完成測試。
      • (二)重構你的代碼,把Sorting.java Searching.java放入cn.edu.besti.cs1723.(姓名首字母+四位學號)包中。
      • (三)參考七大查找算法在Searching中補充查找算法並測試,提交運行結果截圖。
      • (四)補充實現課上講過的排序方法:希爾排序,堆排序,二叉樹排序等(至少3個)。
      • 選作:編寫Android程序對各類查找與排序算法進行測試。

團隊項目報告連接彙總

代碼託管連接

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

  • 上學期結束時的代碼量:
  • 本學期至今統計的代碼量:
  • 本學期的代碼量爲12870,本學期的代碼量比上學期還多不少,很大的一個緣由是本學期的各類實踐活動比上個學期多了不少,感受本身的動手實踐能力也比上學期要提升很多,感謝王老師٩( 'ω' )و 

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

  • 重讀這篇文章,感受本身又有了很多新的體會。之前總以爲敲代碼只要最終能實現就好,但就像一個軟件要有可維護性同樣,敲代碼其實也是有不少技巧的。我一直以爲敲代碼是一個很枯燥且煩躁的過程,由於想不出來的時候真的很難受,但我歷來沒有想過編程還能夠用「優雅」來形容,就給人一種很是從容自信的感受,人們老是嘲諷程序員是「程序猿」「碼農」,可能在開始學習計算機以後我也有些情不自禁地把本身代入這種角色中,可是就像老師上課說的同樣,「碼農」值得是不思考的機械的敲代碼的程序員,若是可以將敲出優雅的代碼做爲目標,並常常思考怎樣才能使代碼變得更簡單、更直觀可讀,那麼敲代碼其實就成爲一種藝術了,耕耘藝術的人是絕對不會容許本身僅僅侷限於「程序猿」「碼農」的。
  • 我找到一篇博客很好地總結了這篇文章的精髓:王垠《編程的智慧》總結,可是僅僅知道技巧是不夠的,仍是要多敲多練。然而就像《編程的智慧》剛開始說的那樣,若是隻是匆匆寫出代碼,卻歷來不回頭去推敲,修改和提煉也是不行的,仍是要把二者結合起來,才能真正提升本身的代碼質量和編碼水平,感受有那麼點辯證統一的意味在裏面。

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

  • 這個學期我感受我可能比上學期更加積極了一點,就好比第一週總結的課後習題中有一個肯定代碼的增加函數和階次的題,當時很天然地就想到應該實際敲一敲去實踐一下,包括後來有一次敲書上代碼的時候發現了代碼有不少錯誤,若是不是本身敲而是直接複製粘貼別人的那就不可能發現這些錯誤了。因此說敲代碼的時候必定要動腦子想,而不要只是機械地把代碼從書本複製到IDEA上,這樣對理解課本內容也很是有好處,就好比學廣度優先遍歷和深度優先遍歷的時候,其實看教材的時候我徹底不清楚它的原理,可是在仔細看了代碼看懂以後就明白這兩種遍歷方法是怎麼實現的了。

課堂項目實踐

  • 參考藍墨雲班課

課堂實踐連接

  • 時間複雜度分析:計算時間複雜度,用大O記法進行表示,一共4道題。
  • ArrayStack類的實現和測試:實現ArrayStack類中的peek、isEmpty、size和toString方法,並完成四個方法的測試。
  • 鏈表插入:寫出鏈表中節點插入的僞代碼。
  • 鏈表實踐:經過鍵盤輸入一些整數,創建一個鏈表;實現節點插入、刪除、輸出操做;使用冒泡排序法或者選擇排序法根據數值大小對鏈表進行排序。
  • 第4章代碼檢查:運行PP28,PP28的程序,根據我的學號輸入後綴表達式並計算。
  • LinkedStack補全:實現size、isEmpty和toString等方法並進行測試。
  • 第5章代碼檢查:運行課本P72-P73凱撒密碼程序。
  • 楊輝三角(選作題):使用循環隊列輸出楊輝三角。
  • 棧隊列測試題:完成第六題的分析。
  • 第6章代碼檢查:運行PP6.8和PP6.11的程序。
  • 線性表實踐:定義一個商品類Product,須要包括商品名稱、價格等信息,使用鏈式存儲結構實現一個線性表,存儲商店中的商品,同時支持插入、刪除、選擇排序、查找等功能,並進行簡單測試。
  • ASL測試:已知線性表具備元素{5,13,19,21,37,56,64,75,80,88,92},若是使用折半查找法,計算其ASL。
  • 三種查找算法練習:畫出三種算法的存儲形式和並計算ASL。
  • 哈希衝突處理實踐:把本身的學號加21,例如學號爲1,把22添加到序列{11,78,10,1,3,2,4,21}後面,使用鏈地址法,解決衝突,同時計算ASL,輸出衝突次數。
  • 希爾排序測試:當D2等於2時,寫出第2趟排序結果。
  • 樹-計算題:計算下列三道題
    • 1.有1023個結點的徹底二叉樹,其高度是多少?葉結點數是多少?
    • 2.高度爲h的徹底二叉樹至少有多少個結點?至多有多少個結點?
    • 3.已知一棵度爲m的樹中有n1個度爲1的結點,n2個度爲2的結點,…,nm個度爲m的結點,問該樹中有多少個葉結點?
  • 樹的深度和葉子個數計算:參考下面葉子節點計算的僞代碼,計算課本中背部疼痛診斷器中決策樹的葉子節點個數,並根據課堂介紹的遞歸樹深度計算算法,計算決策樹的深度。
int CountLeaf ( BiTree T,  int &count )
{     if ( T ) 
     {     if (  (!T->lchild) && (!T->rchild)  )
            count++;     // 對葉子結點計數
            CountLeaf( T->lchild, count);  
         CountLeaf( T->rchild, count); 
  }
}
  • 中序和先序計算二叉樹結構:已知一棵二叉樹的先序序列和中序序列分別爲ABDGHCEFI 和 GDHBAECIF,試肯定二叉樹結構。
  • 層次遍歷法實踐:使用遞歸和非遞歸的方法實現層序遍歷,遍歷背部疼痛決策樹,並按照層次順序輸出每一個節點內容。
  • 堆構造與排序:根據關鍵字序列:36,30,18,40,32,45,22,50,構造一顆小頂堆,並排序,畫出構造堆過程(樹+數組)
  • 堆排序測試:根據關鍵字序列:36,30,18,40,32,45,22,50,利用數組構造一顆大頂堆,並排序。
  • 十字鏈表練習:依照圖畫出十字鏈表結構。
  • 最小生成樹:依照圖完成下列操做
    • 1.畫出Prim算法的最小生成樹的生成過程
    • 2.畫出Kruscal算法的最小生成樹的生成過程
    • 3.計算最小權值
  • Dijkstra(迪傑斯特拉)算法測試:使用Dijkstra(迪傑斯特拉)算法計算單源(V1出發)最短路徑。要求:(1)寫出V1到各個頂點的最短路徑(2)要求寫出最短路徑計算過程。
  • AOE練習(加分):完成下圖中四道題。


  • 哈夫曼編碼測試:設有字符集: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個英文字母的文件,統計每一個字符出現的機率,根據計算的機率構造一顆哈夫曼樹,並完成對英文文件的編碼和解碼。

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

  • 感受這學期老師講的比上學期更好了,講的都很清楚PPT內容也都很好,並且這個學期的實踐數量相比上學期真的大幅度提高,我感受對個人幫助挺大的,尤爲是如今老師上課講的不少內容都是給咱們課外補充的,課堂實踐常常能幫我鞏固老師上課講的內容,有些聽課時沒聽懂或者比較模糊的地方在作題的時候就很容易搞明白。就像大一的時候學高數線代的時候同樣,檢測你知識學沒學好的最佳方法就是看看你會不會作題(即實踐)。

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

  • 上課認真聽講真的很是很是很是重要,上個學期有時候還由於感受聽不懂因此聽不進去,因此常常用上課錄視頻或者下課問同窗的方法來彌補,可是本學期真的是每一堂課都認認真真聽下來了,課堂實踐部分若是是用代碼實現的實踐還可能費點時間,可是那種純靠思考手寫的通常都會寫,不過仍是容易犯粗心的毛病。

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

  • 首先但願老師若是以後還會教其餘班的話必定要保持如今的講課方式方法,真心以爲這學期比上學期講得更好了並且每一節課都挺清楚的。課堂實踐方面的話,但願老師不要老是對咱們那麼自信覺得咱們很輕易就能把實踐作完,有些實踐的結束時間稍微設的晚點吧(捂臉)。

課程收穫與不足

本身的收穫(投入,效率,效果等)

  • 感受這個學期學的真的比上學期好不少,首先博客質量要比上學期高,再者感受對這個學期的學習脈絡很清晰,就算有什麼東西忘了,也能很快找到應該從哪兒再把它「撿」起來,我以爲這就是進步,不像上個學期那樣學的稀裏糊塗的,這學期有時候有些東西要用到上學期的知識時要來回翻半天。
  • 而後就是關於java的學習模式,之前就是很隨意,有時候先看書後寫博客,有時候邊看邊寫,可是本學期就造成了一套固定的並且相對而言比較成熟的學習模式,就是先把教材內容看完,而後敲代碼作課後題,最後再寫博客。由於在敲代碼的過程當中常常會對課本內容有一些更深入的理解,這樣在寫教材內容總結的時候也可以更充實。

本身須要改進的地方

  • 效率問題吧,感受這學期雖然對內容學得比較清楚,可是效率真的不高,尤爲是寫博客的效率,常常在一個小地方卡半天。
  • 而後還有一點,可能由於這個學期學習的時間有所減小,因此對於教材上的內容深究的很少了,不少東西都只是浮於表面,我以爲這也是我這學期博客中提出的問題不多的緣由所在,在從此的學習中必定要努力避免這種狀況。

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

  • 提及來慚愧,感受我和結對夥伴這學期的狀態和上學期正好是相反的,剛開學的幾周狀態很好,巔峯應該是第四周,國慶的時候咱們兩個從4號開始泡到912學java,最搞笑的是本身的問題都是對方幫忙解決的。可是日後因爲種種緣由,結對學習的時間逐漸變少,可能到了期末作項目的時候又好起來了。
  • 雖然我也幫他解決了很多代碼上的問題,但我以爲我本學期和他說的最多的仍是怎麼把博客寫的更好一點。本學期個人結對夥伴給我提供的幫助包括各類方面,課本上代碼的理解啊,IDEA裏的運行錯誤啊,包括如何修改博客園的字體樣式也是他教會個人,整體而言仍是給我提供了不少幫助的~

問卷調查

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

  • 20-30小時,感受比上個學期要多,通常可能要一到兩天的時間。

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

  • 感受有了前期的積累,後期學起來要效率高一點。
  • 首先是有了(自認爲的)規範的學習模式,再其次是這學期後期的學習內容基本都和樹是相關的,學習起來比較連貫,課後實踐也基本先後有聯繫,相對而言效率要比前期高。

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

  • 有啊!並且這學期藍墨雲改版了,PPT看起來更方便了,並且這學期基本都是一些文檔博客PPT,相比上學期的視頻而言看起來更方便了。
  • 建議是但願班課上的資源仍是文檔類的比較好,視頻類的真的不方便看,若是設置成進度條不可拖拽的話有些時候比較浪費時間。

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

  • 不僅侷限於課本。若是真的課本內容比較簡單就講一些課外的知識,感受這學期真的學習到了好多知識。

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

  • 那種拍視頻一個0.5分的加分項,有時候課上回答一個問題也能加0.5分,可是拍視頻真的是個蠻費時間的事情,最後只給加0.5分感受有點虧,並且上傳以後看的人不是不少(基本都十來我的左右),若是不能稍微增長分值的話感受這個仍是取消比較好。

你以爲這門課老師應該開始作什麼新的事情?

  • 暫時尚未想到...感受如今java這種翻轉課堂的授課模式已經成熟得不能再成熟了。
  • 那就但願老鐵能偶爾稍微休息休息吧不要再那麼累本身了_(:з」∠)_

其餘自由發揮

  • 寫到這裏其實能夠說整個程序設計與數據結構課程的學習也就接近尾聲了,想一想這是最後一篇博客了還有些興奮。
  • 說實話博客是我整個學習過程當中最磨人的小妖精了,常常由於寫博客花費不少時間,一直再糾結應該怎麼寫,由於我有一些功利心理,因此總想着怎麼才能把博客寫好拿到加分,常常寫得愁眉苦臉成天鬱郁不得志,有時候周圍人比本身博客寫的晚但交得早那種感受真的蠻苦澀的,若是有一篇博客本身以爲寫得賊好結果最後沒拿到加分,可能後面幾周寫博客的時候都會很糾結,懼怕本身又寫很差,還會常常去看那回加分的那幾篇博客有哪些優勢能夠借鑑。這種功利的追求加分真的把本身搞得蠻累的,不過起碼寫出來的博客都還讓本身比較滿意,內容還算充實。但願以後還有學習這門課的學弟學妹在偶然間翻到個人博客時不會以爲「這我的博客寫的好水啊」,若是他們可以以爲我哪一篇博客寫得不錯那我就更開心啦。
  • 我一直很清楚我不是那種java學的好的人,到如今爲止還有些東西可能概念仍是不清晰(主要集中在上學期學習的東西),記得本學期一次上課的時候老師從新提起遞歸,當時有些同窗立馬就能說出遞歸是什麼,一針見血說出它的要點,但當時我卻腦子一片空白,我就很慌張,趕忙翻之前的博客去看。人都是有忘性的,因此說知識是要及時複習的,由於java學習和其餘課程的學習形式有所不一樣,讓我常常忽略這點,在之後其餘課程的學習中必定要注意及時複習。
  • 也不知道本身絮絮不休打了這麼多會不會都是廢話,總而言之,整個java的學習過程仍是痛並快樂着的,那種Debug了好屢次改了很久的代碼最後終於運行成功的想讓人到操場飛奔十幾圈的開心多是我在其餘事情上永遠感覺不到的。

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

教材內容總結

  • 第一週總結
  • 第二週總結
  • 第三週總結
  • 第四周總結
  • 第五週總結
  • 第六週總結
  • 第七週總結
  • 第八週總結
  • 第九周總結

實驗報告

  • 實驗一 線性結構之數組和鏈表
  • 實驗二 樹的應用
  • 實驗三 查找與排序

項目

  • 團隊做業第一週
  • 團隊做業第二週
  • 衝刺階段Day1-Day7






課堂實踐

  • 時間複雜度分析
  • ArrayStack類的實現和測試
  • 鏈表插入
  • 鏈表實踐
  • 第4章代碼檢查
  • LinkedStack補全
  • 第5章代碼檢查
  • 楊輝三角(選作題)
  • 棧隊列測試題
  • 第6章代碼檢查
  • 線性表實踐
  • ASL測試
  • 三種查找算法練習
  • 哈希衝突處理實踐
  • 希爾排序測試
  • 樹-計算題
  • 樹的深度和葉子個數計算
  • 中序和先序計算二叉樹結構
  • 層次遍歷法實踐
  • 堆構造與排序
  • 堆排序測試
  • 十字鏈表練習
  • 最小生成樹
  • Dijkstra(迪傑斯特拉)算法測試
  • AOE練習(加分)
  • 哈夫曼編碼測試
相關文章
相關標籤/搜索