20172321 2018-2019-1 《程序設計與數據結構》第二週學習總結

教材學習內容總結

第三章:集合概述-棧

  • 3.1集合
    • 集合是一種隱藏了實現細節的抽象。
    • 集合能夠分爲兩大類:包括線性集合和非線性集合。
    • 抽象:抽象能隱藏某些細節,就例如書上的例子,汽車的方向盤等控制裝置就是一種抽象,讓咱們不用關心底層細節就能控制整個操做過程。
    • 抽象數據類型:一個抽象數據類型(ADT)是由數據和在該數據上所實施的操做構成的集合,一個ADT有名稱、值域和一組容許執行的操做。
    • 數據結構是一種用於實現集合的編程結構集。咱們能夠利用線性數據結構來實現非線性集合。
  • 3.2棧集合
    • 棧(stack)是一種線性集合,其元素添加和刪除都在同一端進行。
    • 棧的元素是按照後進先出(LIFO)(即 Last in ,first out)的方法進行處理的,最後進入棧中的元素最早被移出。
    • 棧的一個本性——全部操做都是在一端進行的,所以,在中間或者底部刪除、增添就很困難。(若是須要訪問集合中間或者底部的元素,那麼不適合棧做爲數據結構)
    • 棧的一些操做
    操做 描述
    push 添加一個元素到棧的頂部
    pop 從棧的頂部移出一個元素
    peek 查看棧頂部的元素
    isempty 肯定棧是否爲空
    size 肯定棧的元素數目
  • 3.3主要的面向對象的概念
    • 多態引用是一個引用變量,他能夠在不一樣地點引用不- 同類型的對象。術語「多態性」可定義爲「具備多種形式」。經過多態引用調用的某個方法,在每次調用的時候均可以發生變化。
    • 繼承可用於建立一個類層次,一個引用變量可用於指向與之相關的任意對象。繼承就是從已有類派生出一個新類的過程。新類自動地含有初始類的部分和所有變量和方法。
    • 泛型(generic type):一個集合所管理的對象的類型要在實例化該集合對象時才肯定。泛型保證了集合中對象類型的兼容性。
  • 3.5異常
    • 異常(exception)就是一種對象,它定義了一種非正常或錯誤的狀況。異常有程序或運行時環境拋出,能夠按預期的被捕獲或被正確處理。
  • 3.6棧ADT
    • 棧接口類中的各個方法
public interface Stack<T>
{
    
    public void push (T element);

    public T pop();
    
    public T peek();
    
    public boolean isEmpty();
    
    public int size();
    
    public String toString();
}
  • 3.8ArrayStack類
    • 泛型(包括泛型數組)不能被實例化。這就是咱們必須建立一個存儲Object引用的數組,而後把他轉換成泛型數組的緣由。
    stack = (T[])(new Object[initialCapiry])

第四章:鏈式結構——棧

  • 4.1連接作引用
    • 對象引用變量能夠用來建立鏈式結構,鏈式結構是一種數據結構
      -對象引用變量存放的是對象的地址,表示對象在內存中的存儲位置
      -在鏈表中存儲的對象一般泛稱爲該鏈表的結點,注:須要一個單獨的引用變量來表示鏈表的首結點,鏈表終止於其next引用爲空的結點
  • 4.2管理鏈表
    • 改變引用順序是維護鏈表的關鍵
    • 處理鏈表的首結點須要進行一些特殊的處理,個人理解是,若是處理首結點時沒有注意front引用,就可能致使整條鏈表的丟失。
  • 4.5使用棧來穿越迷宮
    • 能夠用棧來模擬遞歸處理,以跟蹤恰當的數據
  • 4.6用鏈表實現棧
    • 這一章用鏈表實現棧LinkedStack和上一章用數組實現棧ArrayStack聯繫很大,各有優劣,學習的時候應該觸類旁通,相互思考。

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

  • 問題1:不能明白泛型究竟是什麼,能夠怎麼使用
  • 解答:==泛型,即「參數化類型」。一提到參數,最熟悉的就是定義方法時有形參,而後調用此方法時傳遞實參。那麼參數化類型怎麼理解呢?顧名思義,就是將類型由原來的具體的類型參數化,相似於方法中的變量參數,此時類型也定義成參數形式(能夠稱之爲類型形參),而後在使用/調用時傳入具體的類型(類型實參)。==;泛型的參數類型能夠用在類、接口和方法的建立中,分別稱爲泛型類、泛型接口和泛型方法。雖然仍是有點懵逼,可是約莫大概也許是明白了一部分

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

  • 在編寫完pp3.2而且運行的時候,發現了一個詭異的錯誤,就是它只會把最後一個入棧的字符彈出,後面的全是null。

  • 最後通過調試,發現是寫棧的時候出了一點問題,指針沒有正確的移動。

代碼託管

PP3.9的代碼無法上傳到馬雲,在這裏貼出來html

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Stack;

public class MainActivity extends AppCompatActivity {

    Stack<String> stack = new Stack();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button1 = (Button)findViewById(R.id.button1);
        button1.setOnClickListener(new myButtonOnClickListener1());
        Button button2 = (Button)findViewById(R.id.button2);
        button2.setOnClickListener(new myButtonOnClickListener2());
    }

    public class myButtonOnClickListener1 implements View.OnClickListener{
        public void onClick(View view){
            EditText editText1 = (EditText)findViewById(R.id.editText1);
            stack.push(editText1.getText().toString());
            EditText editText2 = (EditText)findViewById(R.id.editText2);


            editText2.setMovementMethod(ScrollingMovementMethod.getInstance());
            editText2.setText(editText2.getText(),TextView.BufferType.EDITABLE);
            editText2.setText(stack.toString(), TextView.BufferType.EDITABLE );
            System.out.println(editText2.getText().toString());
        }
    }

    public class myButtonOnClickListener2 implements View.OnClickListener{
        public void onClick(View view){

            EditText editText1 = (EditText)findViewById(R.id.editText1);
            stack.pop();
            EditText editText2 = (EditText)findViewById(R.id.editText2);


            editText2.setMovementMethod(ScrollingMovementMethod.getInstance());
            editText2.setSelection(editText2.getText().length(),editText2.getText().length());
            editText2.setText(stack.toString(),TextView.BufferType.EDITABLE);
            System.out.println(editText2.getText().toString());
        }
    }

上週考試錯題總結

  • 1.Which Growth function has the highest order?
    • A .O(n log n)
    • B .O(n2)
    • C .O(2n)
    • D .O(log n)
    • 正確答案: C 你的答案: B
  • 解析:==c(常量)<㏒₂n < n < n㏒₂n < n²< n³ < 2ⁿ < 3ⁿ< n!==很明顯,這道題若是把B看成n^2就會選B了。java

  • 2.Which of the following has the smallest time complexity?
    • A .3n+5+2n
    • B .logn+2
    • C .3n+4
    • D .nlogn
    • 正確答案: B 你的答案: C
  • 解析:㏒₂n < n,作題的時候沒有記熟,想固然的選了Candroid

結對及互評

本週結對學習狀況

  • [20172324曾程](http://www.cnblogs.com/amberR/p/9670328.html)
  • 博客中值得學習的或問題:
    • 內容詳略得當;
    • 代碼調試環節比較詳細;
  • 基於評分標準,我給本博客打分:14分。得分狀況以下:
    • 正確使用Markdown語法(加1分)
    • 模板中的要素齊全(加1分)
    • 教材學習中的問題和解決過程, 加4分
    • 代碼調試中的問題和解決過程, 加4分
    • 本週有效代碼超過300分行,加2分
    • 其餘加分,加2分
    • 排版精美的加一分
    • 進度條中記錄學習時間與改進狀況的加1分

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 0/0 1/1 8/8
第二週 671/671 1/2 17/25

參考資料

相關文章
相關標籤/搜索