20182330《程序設計與設計結構》 第七週學習總結

20182330《程序設計與設計結構》 第七週學習總結

教材學習內容總結

週一:Android四大組件

  1. Activity(能看見的能活動的)
  2. Service(看不見的一些操做,支持進程。)
  3. content provider(給學號傳信息)
  4. broadcast receiver

週三:數據結構:計算機存儲、組織數據等的方式

軟件開發java

  1. 軟件質量的特徵:重用 效率 可靠等
    沒有一種解決方案能夠解決全部問題
  2. 程序=數據結構+算法
    軟件=程序+軟件工程
  3. 算法效率:用CPU的使用時間表示
    算法分析是從效率角度對算法進行分類
    增加函數
  4. 時間複雜度是O(n^2)(大o記法),那個大取哪一個,忽略小的
    n*o(1)=o(n).執行多少次。多層循環看平方
    計算規則:加法準則,並列程序段
    乘法準則,嵌套程序段
    特殊準則,本身定義

週五:棧:先進後出。棧頂,棧底

  1. 棧操做:
    入棧(壓棧)push,出棧(彈棧)pop,peek(取棧頂元素),empty(棧是否爲空)
  2. 泛型(放什麼類型的元素)模板,什麼類型均可以
    class box
  3. 使用:Stack stack=new Stack();
    stach.push(name); System.out.println(stack);
  4. top與peek:(用數組實現棧)
    top(相似指針)進一個元素0的位置,top到1(巧妙查看棧中有幾個元素),top-1要刪除前面的值
    peek可查看棧頂
  5. 前綴中綴後綴表達式(根據操做符位置)
    eg:1+1中綴
    後綴表達式也叫逆波蘭表達式
    用棧實現後綴表達式:碰見一個數,把他放到棧中,在遇到一個運算符時,該運算符做用於從該棧彈出的兩個數上,在將結果放入到棧中

教材學習中的問題和解決過程

  • 問題1:爲何用數組實現列表時沒有用環形數組,與用數組實現隊列時有何區別?
  • 問題1解決方案:對於非環形數組數組實現隊列假定隊列的首元素老是存儲在數組的索引0處,因爲隊列處理會影響該集合的兩端,所以在刪除元素時,該策略要求移動元素,使得dequeue操做的複雜度爲O(n),數組實現的操做選使得效率低,而把數組看作環形的,能夠去除在隊列的數組實現中把元素位移的須要。
  • 而對於使用數組實現列表,通常的列表也能夠從兩端添加和刪除元素,可是它們還有從列表中間插入或刪除元素,所以沒法避免要移動元素,也可使用環形數組方法,可是當從列表中間插入或者刪除元素,仍然須要移動元素,於是使用環形數組就顯得沒有必要了android

  • 問題2:什麼是堆棧,堆和棧究竟是不是一個概念
  • 問題2解決方案:堆棧,其實就是棧。在計算機領域,堆棧是一個不容忽視的概念,堆棧是一種數據結構。堆棧都是一種數據項按序排列的數據結構,只能在一端(稱爲棧頂(top))對數據項進行插入和刪除
  • 堆是計算機科學中的一種特別的樹狀數據結構。如果知足如下特性,便可稱爲堆:「給定堆中任意節點 P 和 C,若 P 是 C 的父節點,那麼 P 的值會小於等於(或大於等於) C 的值」。若父節點的值恆小於等於子節點的值,此堆稱爲最小堆;反之,若父節點的值恆大於等於子節點的值,此堆稱爲最大堆。在堆中最頂端的那一個節點,稱做根節點,根節點自己沒有父節點
  • 堆和棧在java中的區別
    在java中堆通常用來存儲對象和數組,棧通常用來存儲方法和基本類型(注:基本類型不包括string)變量。
    棧的存取速度比堆快。棧中的數據是能夠共享的(解釋:好比int a = 3; int b =3; 此時b的指針直接指向3的地址便可,不用從新開闢一塊空間存儲3的地址)git

  • 問題3:隊列、鏈表和堆棧三者的區別
  • 問題3解決方案:隊列和堆棧是兩個相似鏈表的線性數據結構,但在使用時有更多的限制。對於通常的鏈表,能夠經過鏈表的任意位置插入和刪除節點進行修改,可是隊列只能在一端加入節點(入隊)(入棧),在另外一端一處節點(出隊)(出棧),所以隊列是先進先出(FIFO)數據結構,堆棧是後進先出(LIFO)數據結構。算法

  • 問題4:對於隊列,咱們是在其兩端進行操做的,而順序也不是可有可無的了,所以,用固定數組來實現棧的效率不高,由於隊列的順序很重要因此實現棧的效率不高?
  • 問題4解決方案:對比以前提到固定數組實現策略是對棧高效的,而且在網上查閱資料獲得,應該是「用固定數組來實現隊列的效率不高」數組

代碼調試中的問題和解決過程

  • 問題1:循環列表補全的實踐中,一直報錯
  • 問題1解決方案:仔細檢查發現是原來的isEmpty方法寫錯了,原來是return0致使一直拋出錯誤,更改後的代碼以下:數據結構

  • 問題2:代碼又雙叒叕git不上去了
  • 問題2解決方案:
    查找並調試了半天,發現這是電腦自帶程序的問題,因爲電腦裏的Xcode升級,致使電腦不認識從位置網站下載的盜版idea,從新鏈接一下就行了ide

代碼託管

前幾周忘了截圖,這是截止第十週以前的代碼,之後會記得按時截圖,如下統計代碼量按照總增量/3計算。函數

上週考試錯題總結

上週無考試學習

結對及互評

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20182314
    • 點評:由於數據結構種重在理解,因此知識點能夠更加詳細一點,通俗一點,體現出本身的理解。對於代碼中的問題分析的很到位。

基於評分標準,我給本博客打分:13分。得分狀況以下:
排版精美的加1分
結對學習狀況真實可信的加1分
正確使用Markdown語法
模板中的要素齊全(加1分)
錯題學習深刻的加1分
點評認真,能指出博客和代碼中的問題的加1分
教材學習中的問題和解決過程, 加5分
代碼調試中的問題和解決過程,加2分

其餘(感悟、思考等,可選)

進入數據結構的學習,時間緊張到連實驗課的時間都被用來不停的灌輸知識點,因此只是課上聽懂是不夠的,課下必定要回顧而且多多實踐!

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 42/42 2/2 20/20
第三週 394/471 2/4 25/45
第四周 394/471 2/4 25/45
第五週 1668/2139 2/6 35/80
第六週 2388/4527 1/7 30/110
第七週 1660 /6187 2/9 25/135
  • 計劃學習時間:20小時

  • 實際學習時間:25小時

  • 改進狀況:但願多多實踐

參考資料

相關文章
相關標籤/搜索