陣列(array):是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。
1、線性表
顧名思義,線性表就是資料排成像一條線一樣的結構。每個線性表上的資料最多只有前和後兩個方向。還有鍊錶、棧和佇列。
與之對應的是非線性表,比如二叉樹、堆、圖等。資料之間不是簡單的前後關係。
2、連續的記憶體空間和相同的資料型別
由於這兩個特性,陣列支援隨機訪問。但也讓其他操作變得低效,如插入、刪除。因為為了保證陣列的連續性,在進行插入和刪除操作時,需要資料搬移。
但在實際操作中,在某些特殊場景下我們將多次刪除操作集中在一起執行,會提高刪除的效率。
3、如何實現隨機訪問?
a[i]_address = base_address + i*type_size
1、警惕陣列的訪問越界問題2、對於業務開發,直接使用容器就足夠了。但是對於一些非常底層的開發,比如開發網路框架,陣列優於容器。
一維
a[k]_address = base_address + k*type_size
二維
a[i][j]_address = base_address + ( i * n + j) * type_size
對於業務開發,直接使用容器就足夠了,如果做非常底層的開發,比如開發網路框架,這是陣列會優於容器,成為首選。 資料結構與演算法(極客時間 王爭)09丨佇列
先進者先出,這就是典型的 佇列 棧 入棧 push 出棧 pop 佇列 入隊 enqueue 出隊 dequeue 所以,佇列跟棧一樣,也是一種操作受限的線性表資料結構。作為一種基本的資料結構,佇列應用非常廣泛,特別是具有一些額外特性的佇列,比如迴圈佇列 阻塞佇列 併發佇列。它們在很多偏底層系統 框...
極客時間資料結構與演算法之美筆記7
鍊錶節點插入 new node next p next p next new node 鍊錶節點刪除 p next p next next 上述兩個鍊錶操作,對於空節點或者最後乙個節點場景,會有異常。帶有頭節點 哨兵節點 的鍊錶思路 這個思路形似用空間換時間。即用增加包裹節點換減少乙個判斷語句。減少...
05 資料結構與演算法 佇列
created by chen da 佇列類似生活中的排隊,為fifo結構。兩個基本操作 入隊push和出隊pop。用單鏈表可以實現,雙鏈表雖然可以,但是操作比較複雜。先實現乙個單鏈表 class node object def init self,value none,next none self...