日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

七、线性表的链式存储结构

發(fā)布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 七、线性表的链式存储结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。