陣列、鍊錶、hash的優缺點:
1、陣列是將元素在記憶體中連續存放。
鍊錶中的元素在記憶體中不是順序儲存的,而是通過存在元素中的指標聯絡到一起。
2、陣列必須事先定義固定的長度,不能適應資料動態地增減的情況。當資料增加時,可能超出原先定義的元素個數;當資料減少時,造成記憶體浪費。
鍊錶動態地進行儲存分配,可以適應資料動態地增減的情況。
3、(靜態)陣列從棧中分配空間, 對於程式設計師方便快速,但是自由度小。
鍊錶從堆中分配空間, 自由度大但是申請管理比較麻煩。
陣列和鍊錶在儲存資料方面到底孰優孰劣呢?根據陣列和鍊錶的特性,分兩類情況討論。
一、當進行資料查詢時,陣列可以直接通過下標迅速訪問陣列中的元素。而鍊錶則需要從第乙個元素開始一直找到需要的元素位置,顯然,陣列的查詢效率會比鍊錶的高。
二、當進行增加或刪除元素時,在陣列中增加乙個元素,需要移動大量元 素,在記憶體中空出乙個元素的空間,然後將要增加的元素放在其中。
同樣,如果想刪除乙個元素,需要移動大量元素去填掉被移動的元素。而鍊錶只需改動元素中的指標即可實現增加或刪除元素。
那麼,我們開始思考:有什麼方式既能夠具備陣列的快速查詢的優點又能融合鍊錶方便快捷的增加刪除元素的優勢?hash呼之欲出。
所謂的hash,簡單的說就是雜湊,即將輸入的資料通過hash函式得到乙個key值,輸入的資料儲存到陣列中下標為key值的陣列單元中去。
我們發現,不相同的資料通過hash函式得到相同的key值。這時候,就產生了hash衝突。解決hash衝突的方式有兩種。
一種是掛鏈式,也叫拉鍊法。掛鏈式的思想在產生衝突的hash位址指向乙個鍊錶,將具有相同的key值的資料存放到鍊錶中。
另一種是建立乙個公共溢位區。將所有產生衝突的資料都存放到公共溢位區,也可以使問題解決。
hash表其實是結合了陣列和鍊錶的優點,進行的折中方案。平衡了陣列和鍊錶的優缺點。hash的具體實現有很多種,但是需要解決衝突的問題。
不相同的資料通過hash函式得到相同的key值。這時候,就產生了hash衝突。解決hash衝突的方式有兩種。一種是掛鏈式,也叫拉鍊法。
掛鏈式的思想在產生衝突的hash位址指向乙個鍊錶,將具有相同的key值的資料存放到鍊錶中。
另一種是建立乙個公共溢位區。將所有產生衝突的資料都存放到公共溢位區,也可以使問題解決。
陣列和鍊錶的優缺點
array與list,使指資料結構概念上的陣列與鍊錶的優缺點吧.如果指的是array類 或介面 與list介面的優缺點的話,就不好理解了.陣列,在記憶體上給出了連續的空間.鍊錶,記憶體位址上可以是不連續的,每個鍊錶的節點包括原?吹哪詿婧拖亂桓黿詰愕男畔?單向的乙個,雙向鍊錶的話,會有兩個 陣列優於鍊...
陣列和鍊錶的優缺點
陣列,在記憶體上給出了連續的空間。鍊錶,記憶體位址上可以是不連續的,每個鍊錶的節點包括原來的記憶體和下乙個節點的資訊 單向的乙個,雙向鍊錶的話,會有兩個 a.記憶體空間占用的少,因為鍊錶節點會附加上一塊或兩塊下乙個節點的資訊。但是陣列在建立時就固定了。所以也有可能會因為建立的陣列過大或不足引起記憶體...
鍊錶與陣列的優缺點
陣列是將元素在記憶體中連續存放,由於每個元素占用記憶體相同,可以通過下標迅速訪問陣列中任何元素。但是如果要 在陣列中增加乙個元素,需要移動大量元素,在記憶體中空出乙個元素的空間,然後將要增加的元素放在其中。同樣的 道理,如果想刪除乙個元素,同樣需要移動大量元素去填掉被移動的元素。如果應用需要快速訪問...