陣列和鍊錶

2021-09-19 20:57:44 字數 1297 閱讀 8636

術語

在講述陣列和鍊錶之前,我們先了解乙個術語——索引和大o表示法。

索引指元素的位置,因此我們不說「元素20的位置為1」,而說「元素20位於索引1處」。

大o表示法指出演算法的速度有多快,演算法執行時間的增速。如o(n)中的n指的是「運算元」,也就是演算法執行時操作了幾次。有鑑於此,我們不僅要知道演算法需要多長時間才能執行完畢,還需要知道執行時間如何隨列表增長而增加。

常見的用大o表示法表示的5種執行時間:(1)o(log n),也叫對數時間,這樣的演算法包括二分查詢;(2)o(n),也叫線性時間,這樣的演算法包括簡單查詢;(3)o(n*log n ),這樣的演算法包括快速排序法,一種較快的排序演算法;(4) o(n2),n的平方,這樣的演算法包括選擇排序,一種速度較慢的排序演算法;(5)o(n!),這樣的演算法包括旅行商問題的解決方案,一種非常慢的演算法。

接下來談談陣列和鍊錶

陣列是一組相關資料的集合,乙個陣列實際上就是一連串的變數,陣列按照使用可以分為一維陣列、二維陣列、多維陣列。鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。

優缺點

鍊錶和陣列作為儲存資料的資料結構,也有其優缺點,具體表現在「訪問」、「插入」和「刪除」操作中。

(1) 訪問,陣列既支援順序訪問,又支援隨機訪問,而鍊錶僅支援順序訪問,所以陣列的訪問時間o(1),而鍊錶的訪問執行時間o(n);

(2)插入,在鍊錶中插入元素時,只需要將它前面元素指向的位址進行修改即可,而在陣列中插入元素的時候,必須將後面的元素都往後移,如果沒有足夠的空間,可能還需要將這個陣列複製到其他地方。這樣就導致陣列和鍊錶在「插入」操作中的執行時間不一樣,陣列的執行時間是o(n),而鍊錶的執行時間是o(1);

(3)刪除,使用陣列時,刪除元素之後,必須將後面的元素都向前移動,而使用鍊錶時,只需修改前乙個元素指向的位址即可。所以,使用陣列時,刪除操作的執行時間是o(n),而使用鍊錶時,刪除操作的執行時間是o(1)。

區別

陣列與鍊錶區別:(1)陣列中元素儲存的記憶體是連續的,鍊錶中的元素可儲存在記憶體的任何地方,換句話說,在陣列中,元素都是緊緊地靠在一起,而在鍊錶中,元素並非靠在一起;(2)陣列的優勢在於訪問/讀取元素方面,而鍊錶的優勢在於插入元素方面;¶

陣列和鍊錶

陣列名代表陣列的首位址,陣列的下標其實代表陣列中某個元素相對首位址的偏移量,陣列的第乙個元素是零偏移,因此從 0 開始。上面其實也只是乙個解釋,c 語言設計者用零開始編號,後來的各種語言也便紛紛效仿,因此就形成了這個習慣。單鏈表只支援乙個方向的訪問,第乙個節點稱為頭結點,最後乙個節點稱為尾結點。迴圈...

陣列和鍊錶

陣列名代表陣列的首位址,陣列的下標其實代表陣列中某個元素相對首位址的偏移量,陣列的第乙個元素是零偏移,因此從 0 開始。上面其實也只是乙個解釋,c 語言設計者用零開始編號,後來的各種語言也便紛紛效仿,因此就形成了這個習慣。單鏈表只支援乙個方向的訪問,第乙個節點稱為頭結點,最後乙個節點稱為尾結點。迴圈...

陣列和鍊錶

定義 儲存同一種型別多個元素的容器 特點 查詢快,增刪慢 查詢 直接根據索引值即可 增加元素 假設在x元素元素後加入y元素 a 新建乙個陣列,長度比原陣列大1 b 遍歷原陣列,找到x元素位置 c 將原陣列裡x元素及x元素前面的元素都賦給新陣列 d 再將y元素及x元素後的所有元素賦值給新陣列 刪除元素...