溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

關(guān)于順序表的基本操作。代碼+注釋

發(fā)布時間:2020-07-16 10:21:44 來源:網(wǎng)絡(luò) 閱讀:400 作者:涼白開dream 欄目:編程語言

```// 順序表的元素類型 int
public class MyArrayList {
// 屬性是什么
private int[] array; // 代表的是存在數(shù)據(jù)的數(shù)組
// array.length 代表的是數(shù)組的容量
private int size; // 記錄順序表的已有數(shù)據(jù)個數(shù)

// 構(gòu)造方法
public MyArrayList() {
    // 1. 申請空間
    array = new int[2];
    // 2. 初始化數(shù)據(jù)個數(shù)
    size = 0;
}

// 增(重點)
// 平均 O(1)
public void pushBack(int element) {
    ensureCapacity();
    array[size++] = element;
}

public void pushFront(int element) {
    ensureCapacity();
    for (int i = size; i >= 1; i--) {
        array[i]  = array[i - 1];
    }

    array[0] = element;
    size++;
}

public void insert(int index, int element) {
    if (index < 0 || index > size) {
        System.err.println("下標錯誤");
        return;
    }

    ensureCapacity();

    for (int i = size - 1; i >= index; i--) {
        array[i + 1] = array[i];
    }
    array[index] = element;
    size++;
}

// 刪(重點)
public void popBack() {
    if (size <= 0) {
        System.err.println("順序表為空");
        return;
    }
    array[--size] = 0;
}

public void popFront() {
    if (size <= 0) {
        System.err.println("順序表為空");
        return;
    }

    for (int i = 0; i < size - 1; i++) {
        array[i] = array[i + 1];
    }

    array[--size] = 0;
}

public void earse(int index) {
    if (size <= 0) {
        System.err.println("順序表為空");
        return;
    }

    if (index < 0 || index >= size) {
        System.err.println("下標錯誤");
        return;
    }

    for (int i = index + 1; i < size; i++) {
        array[i - 1] = array[i];
    }

    array[--size] = 0;
}

// 查
// 改
// 打印
public void print() {
    System.out.println("打印順序表: 當(dāng)前容量: " + array.length);
    for (int i = 0; i < size; i++) {
        System.out.print(array[i] + " ");
    }
    System.out.println();
}

// 保證容量夠用,否則進行擴容
private void ensureCapacity() {
    if (size < array.length) {
        return;
    }

    int newCapacity = array.length * 2;
    int[] newArray = new int[newCapacity];
    for (int i = 0; i < size; i++) {
        newArray[i] = array[i];
    }
    array = newArray;
}

// 返回 element 在順序表中的下標,如果出現(xiàn)多次,返回第一次出現(xiàn)的下標
public int indexOf(int element) {
    for (int i = 0; i < size; i++) {
        if (array[i] == element) {
            return i;
        }
    }

    return -1;
}

public int get(int index) {
    if (index < 0 || index >= size) {
        System.err.println("下標錯誤");
        return -1;
    }
    return array[index];
}

public void set(int index, int element) {
    if (index < 0 || index >= size) {
        System.err.println("下標錯誤");
        return;
    }
    array[index] = element;
}

// 刪除掉某一個元素,如果出現(xiàn)多次,刪除第一次出現(xiàn)的
public void remove(int element) {
    int index = indexOf(element);
    if (index != -1) {
        earse(index);
    }
}

public int size() {
    return size;
}

public boolean isEmpty() {
    return size == 0;
}

public void removeAll(int element) {//刪除這個元素所有次出現(xiàn)
    /* 時間:O(n^2)    時間:O(1)
    int index;
    while ((index = indexOf(element)) != -1) {
        earse(index);
    }
    */

    /* 時間: O(n) 空間: O(n)
    int[] newArray = new int[array.length];
    int j = 0;
    for (int i = 0; i < size; i++) {
        if (array[i] != element) {
            newArray[j++] = array[i];
        }
    }
    array = newArray;
    size = j;
    */

    // 時間:O(n)  空間:O(1)
    int j = 0;
    for (int i = 0; i < size; i++) {
        if (array[i] != element) {//遍歷整個數(shù)組,把不是該元素的從數(shù)組頭開始放,
            array[j++] = array[i];
        }
    }
    size = j;//j是不同于element的個數(shù),傳給size,這是整個數(shù)組里前size都是不同的

}

public static void main(String[] args) {
    MyArrayList list = new MyArrayList();
    list.print();
    list.pushBack(1);
    list.pushBack(2);
    list.pushBack(3);
    list.print();   // 1 2 3
    list.pushFront(10);
    list.pushFront(20);
    list.pushFront(30);
    list.print();   // 30 20 10 1 2 3
    list.insert(3, 100);
    list.print();   // 30 20 10 100 1 2 3
    list.insert(20, 200);   // 報錯

    list.earse(2);
    list.earse(2);
    list.print();   // 30 20 1 2 3
    list.popFront();
    list.popFront();
    list.popFront();
    list.print();   // 2 3
    list.popBack();
    list.popBack();
    list.print();   // 空的
    list.popBack(); // 報錯
}

}

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI