數據結構與算法_渡劫4

  • 正在學習的算法課程:極客時間的王爭老師的《數據結構與算法之美》
  • 傳送門: https://time.geekbang.org/column/126
  • 目前學到第五講,很良心,共56講,推薦想學數據結構的同學
  • 好的理論基礎離不開代碼,今天用python擼了一遍鏈表的操作,找回了很久沒有感受到的成就感,後期可能會上傳github
  • 2019/09/25

一、數組

1. 定義:數組(Array)是一種線性表數據結構,用一組連續的內存空間,來存儲一組具有相同類型的數據

2. 四大邏輯結構:

  • 線性結構
  • 非線性結構:
    • 集合結構
    • 圖形結構
    • 樹形結構
  • 內存地址計算
a[i]_address = base_address + i * data_type_size

data_type_size 表示數組中每個元素的大小。我們舉的這個例子裏,數組中存儲的是 int 類型數據,所以 data_type_size 就爲 4 個字節。

3. 數組和鏈表的區別

A:數組支持隨機訪問,根據下表隨機訪問的時間複雜度爲O(1),但是插入和刪除操作的最好情況是O(1),最壞情況是O(n),平均複雜度是O(n)。數組適合查找,鏈表適合插入、刪除


作者的忠告: 在學習的時候,我部門不要死記硬背某個數據結構或者算法,而是要學習它的思想和處理技巧

4. 數組的邊界及越界

上代碼


int main(int argc, char* argv[]){

    int i = 0;

    int arr[3] = {0};    // 定義一個整形數組,長度爲8,全部初始化爲0

    for(; i<=3; i++){

        arr[i] = 0;    // a[3] 超界,無限循環

        printf("hello world\n");

    }

    return 0;

}

講道理,這段代碼我開始又沒有看懂,後來看了作者的解析以及上網查的資料,有如下理解:

因爲用的是python,所以在a[3]的時候python或者java中會報錯,但是在c中不會,a[3]=0 就相當於 i=0,因此代碼會無限循環。

5. 能力提升的靈魂問題

Q1:python的垃圾回收機制

A:1. 引用計數機制;2. 標記清除機制;3. 分代回收機制

b站傳送門: python乾貨分享—垃圾回收機制


Q2:二位數組的內存地址計算

A2:a[i][j]的地址是p+(i*col+j)*d

傳送門:二維數組中數組元素存儲地址的計算一問

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章