七 線性表的鏈式儲存結構

2022-08-11 14:09:21 字數 1618 閱讀 1574

開發陣列類模板的原因在於:在建立基於順序儲存結構的線性表時,發現這樣的線性表可能被誤用,因為過載了陣列訪問操作符,使用時跟陣列類似,但是線性表和陣列有很大的區別,所以激發了新的需求:開發陣列類替換c++原生陣列類,因為原生陣列類也存在著很大缺陷,使用不方便。

基於順序儲存結構的線性表的另乙個缺點:插入或刪除元素時,涉及到大量資料元素的移動,對於效率的影響非常大

乙個新的需求:在插入或刪除元素時不需要大量移動資料元素的一種資料結構,即基於鏈式儲存結構的線性表

為了表示每個資料元素於其直接後繼元素之間的邏輯關係;資料元素除了儲存本身的資訊外,還需要儲存其直接後繼的資訊。

\(a_i\)和\(a_\)是線性表中的兩個相鄰資料元素,在物理記憶體中無相鄰關係。

乙個資料元素包含了兩部分:\(a_i\)是資料元素本身的資料資訊,還有乙個位址資訊,位址是第\(i\)個元素的直接後繼,即第\(i+1\)個的元素在記憶體中的位址資訊。換句話說就是如果找到了第\(i\)個元素,不僅可以得到第\(i\)個元素的本身的值之外,還可以得到第\(i+1\)個元素在記憶體中的位置

基於鏈式儲存結構的線性表中,每個結點都包含資料域和指標域

兩種線性表名稱統一:

5.1 單鏈表中的結點定義

// 用struct定義類,預設屬性是public

// t是泛指型別,鍊錶可以儲存各種型別的資料

struct node : public object

5.2 單鏈表的內部結構

頭結點在單鏈表中的意義是:輔助資料元素的定位,方便插入和刪除操作,因此,頭結點不儲存實際的資料元素。

5.3 在目標位置處插入資料元素

從頭結點開始,通過current指標定位到目標位置

從堆空間申請新的node結點

執行操作

node->value = e;

node->next = current->next;

current->next - node;

5.4 在目標位置刪除資料元素

從頭結點開始,通過previous指標定位到目標位置的前乙個位址

使用todel指標指向需要刪除的結點

執行操作:

todel = previous->next;

previous->next = todel->next;

delete todel;

鍊錶中的資料元素在物理記憶體中無相鄰關係

鍊錶中的結點都包含資料域和指標域

頭結點用於輔助資料元素定位,方便插入和刪除操作

插入和刪除操作需要保證鍊錶的完整性

線性表的鏈式儲存結構

線性表的鏈式儲存結構 順序儲存結構不足的解決辦法 缺點 最大的缺點就是插入和刪除時需要移動大量元素。為了表示每個資料元素 ai與其直接後續資料元素 ai 1 之間的邏輯關係,對資料元素 ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後續的資訊。我們把儲存資料元素資訊的域稱為資料域,把儲存...

線性表的鏈式儲存結構

線性表的鏈式儲存結構,雙向鍊錶實現 package 線性表 public class dulinklist public node t data,node prev,node next 儲存該鍊錶的頭節點 private node header 儲存該鍊錶的尾節點 private node tail...

線性表的鏈式儲存結構

順序儲存結構的缺點 插入和刪除時需要移動大量元素 鏈式儲存結構的特點 用一組任意的儲存單元儲存線性表的資料元素 資料結構 儲存分配方式 時間效能 空間效能 順序儲存結構 用一段連續的儲存單元一次儲存線性表的資料元素 查詢 o 1 插入刪除 o n 需要預分配儲存空間,分大了浪費,分小了易發生上溢 單...