開發陣列類模板的原因在於:在建立基於順序儲存結構的線性表時,發現這樣的線性表可能被誤用,因為過載了陣列訪問操作符,使用時跟陣列類似,但是線性表和陣列有很大的區別,所以激發了新的需求:開發陣列類替換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 需要預分配儲存空間,分大了浪費,分小了易發生上溢 單...