學號 2018-2019-20172309 《程序設計與數據結構(下)》第二週學習總結

教材學習內容總結

教材學習內容總結

第三章

3.1集合

  • 集合是一種彙集、組織其餘對象的對象。
  • 集合分爲線性集合非線性集合
  • 集合中的元素一般是按照它們添加到集合的順序,或者是按照元素之間的某種內在關係來組織的。
  • 集合是一種隱藏了實現細節的抽像。
  • 數據結構是一種用於實現集合的基本編成結構。

3.2棧集合

  • 棧的元素是按照後進先出(LIFO)的方法進行處理的,最後進入棧的元素最早被移除。

3.3 如何構建一個棧:

  • 定義一個java接口StackADT ,表示做用於泛型T
public interface StackADT<T> {//public   保留字   泛型參數
    /**
     * 彈出棧頂
     * @return
     */
    public T pop();

    public  void  push(T element);
    /**
     * 獲得棧頂,但不彈出
     * @return
     */
    public T peek();

    public boolean isEmpty();

    /**
     * 獲得棧的大小
     * @return
     */
    public int Size();

    /**
     * 打印出棧
     * @return
     */
    @Override
    public String toString();
}
  • ArrayStack類:
public class Stack<T> implements StackADT<T>{

    /**
     * 1. 數組的大小
     * 2. 定義一個數組
     * 3. 肯定棧頂位置
     */
    private  int size=100;
    private  T[] stack;
    private  int top;

    public  Stack(){//構造函數
        top = 0 ;
        stack = (T[]) (new Object[size]);
    }
    public  Stack(int a){//方法重載
        top = 0 ;
        stack = (T[]) (new Object[a]);

    }
}
  • Push操做:
@Override
    public void push(T element) {
        if (Size() == stack.length){
            expandCapacity();
        }
        stack[top] =   element;
        top++;
    }
  • Pop操做
@Override
    public T pop() throws EmptyCollectionException{
        if (isEmpty()) {
            throw new EmptyCollectionException("Stack");
        }
        top--;
        T result = stack[top];
        stack[top]=null;

        return result;
    }
  • peek操做
@Override
    public T peek() throws  EmptyCollectionException{
        if (isEmpty()){
            throw  new  EmptyCollectionException("Stack");
        }
        return stack[top-1];
    }
  • 打印:
@Override
    public String  toString(){
        String result = "";
        for(int i =0;i<Size();i++)
        {
            result += " " + stack[i];
        }
        return result;
    }
  • EmptyCollectionException類
public class EmptyCollectionException extends  RuntimeException {
    public EmptyCollectionException(String collection){
        super("The " + collection + " is empty. ");
    }
}
  • 運行結果:

3.4本章課後做業:

  • pp3.2
  • PP3.8
  • pp3.9 : 這題不會上傳,歡迎學長學姐過來檢查^_^

第四章:

4.1連接做爲引用

  • 對象引用變量能夠用來建立鏈式結構。
  • 鏈表有一些對象構成,其中每一個對象指向了鏈表中的下一個對象。
  • 鏈表會按需求動態增加,所以在本質上沒有容量限制。
  • 如何建立一個鏈表:
public class Person
{
          private String name;
          private String address;
          private Person next; //到另外一個Person的連接
          //其餘內容
}

4.2 管理鏈表

  • 訪問元素
Person current = first;
for ( int i = 0; i<3; i++){
current = current.next;
}//訪問到第四個元素
String  s = current.name//獲得屬性name
  • 插入節點
public static void InsertNode(Student Head, Student node){//當.next爲null時,插入node

        Student node1 = Head;
        if (node1==null){
            Head=node;}
        else {
            while(node1.next!= null){
                node1=node1.next;
            }

            node1.next = node;
        }
    }

 public static  void InsertNode(Student Head,Student node1,Student node2,Student node3){//將node2插入在node1與node3之間(方法重載)
        Student node0  =Head;

        while(node0.number != node1.number && node0!= null){
            node0 = node0.next;
        }
        if (node0.number == node1.number){
            node0.next = node2;
            node2.next = node3;}
        else{
            System.out.println("沒有找到:"+node1.number+"!");
        }
    }
  • 刪除節點:
public static  void DeleteNode(Student Head, int number){//刪除學號爲number 的人
        Student node = Head;
        if (node!=null&&node.number!=number){
            while(node.next.number!=number){
                node = node.next;
            }
            node.next =node.next.next;
        }
        else {
            if (node ==null){
                System.out.println("鏈表中沒有學號爲:"+number+"的這我的。");
            }
            else {
                node.next = node.next.next;
            }
        }
    }

4.3用鏈表創建棧

public class LindedStack<T> implements StackADT<T> {

    private int count;//用於計算棧中元素的個數
    private LinearNode<T> top;//指向頂棧的指針
    public LindedStack(){
        count = 0 ;
        top  = null;
    }

    @Override
    public T pop() {
        if (isEmpty())
            throw new EmptyCollectionException("Stack");

        T result = top.getElement();
        top = top.getNext();
        count--;
        return result;
    }

    @Override
    public void push(T element) {
        LinearNode<T> temp = new LinearNode<T>(element);

        temp.setNext(top);
        top = temp;
        count++;
    }

    @Override
    public T peek() throws EmptyCollectionException
    {
        if (isEmpty()){
            throw new EmptyCollectionException("Stack");}

            T result = top.getElement();
        return result;
    }

    @Override
    public boolean isEmpty() {
        if (count == 0)
            return true;
        else
            return false;
    }

    @Override
    public int Size() {
        return count;
    }

    public String toString(){
        String result="";
        for (int i =0;i<count;i++){
            System.out.println(top.getElement());
            top = top.getNext();
        }
        return result;
    }
}
  • 測試結果

4.4 本章做業

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

  • 暫時沒發現什麼問題。

代碼託管

上週考試錯題總結

  • 錯題1:
  • 緣由,理解狀況:
  • 錯題2:2的n次方,不是2n.
  • 緣由,理解狀況:算法的階次就是算法的複雜度

點評模板:

結對夥伴:20172310

點評隊友:

  • 隊友問題記錄的很是仔細,值得本身學習,之後遇到問題得記錄下來,否則會忘記。
  • 關於課本上遇到的問題,隊友沒有說明本身的理解狀況(好比什麼是泛型),至少我覺的官方的講解太複雜····

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 075/200 1/1 05/20
第二週 560/500 1/2 13/38

參考資料:

相關文章
相關標籤/搜索