七、线性表的链式存储结构
1、問題引入
開發(fā)數(shù)組類模板的原因在于:在創(chuàng)建基于順序存儲結(jié)構(gòu)的線性表時,發(fā)現(xiàn)這樣的線性表可能被誤用,因為重載了數(shù)組訪問操作符,使用時跟數(shù)組類似,但是線性表和數(shù)組有很大的區(qū)別,所以激發(fā)了新的需求:開發(fā)數(shù)組類替換C++原生數(shù)組類,因為原生數(shù)組類也存在著很大缺陷,使用不方便。
基于順序存儲結(jié)構(gòu)的線性表的另一個缺點:插入或刪除元素時,涉及到大量數(shù)據(jù)元素的移動,對于效率的影響非常大
一個新的需求:在插入或刪除元素時不需要大量移動數(shù)據(jù)元素的一種數(shù)據(jù)結(jié)構(gòu),即基于鏈式存儲結(jié)構(gòu)的線性表
2、鏈式結(jié)構(gòu)的定義
為了表示每個數(shù)據(jù)元素于其直接后繼元素之間的邏輯關(guān)系;數(shù)據(jù)元素除了存儲本身的信息外,還需要存儲其直接后繼的信息。
\(a_i\)和\(a_{i+1}\)是線性表中的兩個相鄰數(shù)據(jù)元素,在物理內(nèi)存中無相鄰關(guān)系。
一個數(shù)據(jù)元素包含了兩部分:\(a_i\)是數(shù)據(jù)元素本身的數(shù)據(jù)信息,還有一個地址信息,地址是第\(i\)個元素的直接后繼,即第\(i+1\)個的元素在內(nèi)存中的地址信息。換句話說就是如果找到了第\(i\)個元素,不僅可以得到第\(i\)個元素的本身的值之外,還可以得到第\(i+1\)個元素在內(nèi)存中的位置
3、鏈式存儲邏輯結(jié)構(gòu)
基于鏈式存儲結(jié)構(gòu)的線性表中,每個結(jié)點都包含數(shù)據(jù)域和指針域
- 數(shù)據(jù)域:存儲數(shù)據(jù)元素本身
- 指針域:存儲相鄰結(jié)點的地址
兩種線性表名稱統(tǒng)一:
- 順序表:基于順序存儲結(jié)構(gòu)的線性表
- 鏈表:基于鏈式存儲結(jié)構(gòu)的線性表
- 單鏈表:每個結(jié)點只包含直接后繼的地址信息
- 循環(huán)鏈表:單鏈表的最后一個結(jié)點的直接后繼為第一個結(jié)點
- 雙向鏈表:單鏈表中的結(jié)點包含直接前驅(qū)和后繼的地址信息
- 雙向循環(huán)鏈表......
4、鏈表中的基本概念
- 頭結(jié)點:鏈表中的輔助結(jié)點,包含指向第一個數(shù)據(jù)元素的指針;不包含任何數(shù)據(jù)信息,是為了簡化代碼進行輔助
- 數(shù)據(jù)結(jié)點:鏈表中代表數(shù)據(jù)元素的結(jié)點,表現(xiàn)形式為:(數(shù)據(jù)元素,地址)
- 尾結(jié)點:鏈表中的最后一個數(shù)據(jù)結(jié)點。單獨放出的原因:尾結(jié)點包含的地址信息直接決定了鏈表的性質(zhì),地址信息為空,就是單鏈表;地址為第0個元素的地址信息,就是循環(huán)鏈表;地址信息為隨機值,就是一個非法鏈表
5、單鏈表
5.1 單鏈表中的結(jié)點定義
// 用struct定義類,默認屬性是public // T是泛指類型,鏈表可以存儲各種類型的數(shù)據(jù) struct Node : public Object {T value;Node* next; // 指向后繼結(jié)點的指針 }5.2 單鏈表的內(nèi)部結(jié)構(gòu)
頭結(jié)點在單鏈表中的意義是:輔助數(shù)據(jù)元素的定位,方便插入和刪除操作,因此,頭結(jié)點不存儲實際的數(shù)據(jù)元素。
5.3 在目標位置處插入數(shù)據(jù)元素
從頭結(jié)點開始,通過current指針定位到目標位置
從堆空間申請新的Node結(jié)點
執(zhí)行操作
node->value = e; node->next = current->next; current->next - node;5.4 在目標位置刪除數(shù)據(jù)元素
從頭結(jié)點開始,通過previous指針定位到目標位置的前一個地址
使用toDel指針指向需要刪除的結(jié)點
執(zhí)行操作:
toDel = previous->next; previous->next = toDel->next; delete toDel;6、小結(jié)
鏈表中的數(shù)據(jù)元素在物理內(nèi)存中無相鄰關(guān)系
鏈表中的結(jié)點都包含數(shù)據(jù)域和指針域
頭結(jié)點用于輔助數(shù)據(jù)元素定位,方便插入和刪除操作
插入和刪除操作需要保證鏈表的完整性
轉(zhuǎn)載于:https://www.cnblogs.com/chenke1731/p/9495573.html
總結(jié)
以上是生活随笔為你收集整理的七、线性表的链式存储结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。