玩轉資料結構之陣列

船頭尺發表於2021-09-09

Where to use Data structure?

圖片描述

Data structure

圖片描述

Why learn data structure?

  • Get the top company's offer
  • Better coding
  • Change the world

注意事項

Pythonic的寫法可能比邏輯本身更重要, 當然,其他語言也有類似的情況。

arr[]
for i in range(10)
    arr.append(i)
效率低
arr = [i for i in range(10)]

Array

public class Main {

    public static void main(String[] args) {

        int[] arr = new int[10];
        for(int i = 0 ; i 

然後我看了下class檔案

int[] var8 = scores;
        int var4 = scores.length;

        for(int var5 = 0; var5 

封裝自定義陣列

圖片描述


public class Array {
    // E代表資料型別
    private E[] data;
    private int size;

    // 建構函式,傳入陣列的容量capacity構造Array
    public Array(int capacity){
        data = (E[])new Object[capacity];
        size = 0;
    }

    // 無引數的建構函式,預設陣列的容量capacity=10
    public Array(){
        this(10);
    }

    // 獲取陣列的容量
    public int getCapacity(){
        return data.length;
    }

    // 獲取陣列中的元素個數
    public int getSize(){
        return size;
    }

    // 返回陣列是否為空
    public boolean isEmpty(){
        return size == 0;
    }

    // 在index索引的位置插入一個新元素e
    public void add(int index, E e){

        if(index  size)
            throw new IllegalArgumentException("Add failed. Require index >= 0 and index = index ; i --)
            data[i + 1] = data[i];

        data[index] = e;

        size ++;
    }

    // 向所有元素後新增一個新元素
    public void addLast(E e){
        add(size, e);
    }

    // 在所有元素前新增一個新元素
    public void addFirst(E e){
        add(0, e);
    }

    // 獲取index索引位置的元素
    public E get(int index){
        if(index = size)
            throw new IllegalArgumentException("Get failed. Index is illegal.");
        return data[index];
    }

    public E getLast(){
        return get(size - 1);
    }

    public E getFirst(){
        return get(0);
    }

    // 修改index索引位置的元素為e
    public void set(int index, E e){
        if(index = size)
            throw new IllegalArgumentException("Set failed. Index is illegal.");
        data[index] = e;
    }

    // 查詢陣列中是否有元素e
    public boolean contains(E e){
        for(int i = 0 ; i = size)
            throw new IllegalArgumentException("Remove failed. Index is illegal.");

        E ret = data[index];
        for(int i = index + 1 ; i 

Test Example

圖片描述

泛型

圖片描述

動態陣列

圖片描述

大概思路就是達到臨界值(增加陣列容量或者減少陣列容量)生成一個新陣列,然後內容遷移,最後指向新陣列

時間複雜度

圖片描述
圖片描述

均攤 amortized time complexity

圖片描述

複雜度震盪

圖片描述

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3016/viewspace-2803872/,如需轉載,請註明出處,否則將追究法律責任。

相關文章