特殊鍊錶及順序表的合併

2022-09-19 21:33:34 字數 1453 閱讀 3281

與單鏈表不同的地方:最後乙個結點的指標域指向l

某些情況下,若在迴圈鍊錶中設立尾指標而不設頭指標(見圖2.18(a)),可使一些操作簡化。例如,將兩個線性表合併成乙個表時,僅需將第乙個表的尾指標指向第二個表的第38 第2章線性表乙個結點,第二個表的尾指標指向第乙個表的頭結點,然後釋放第二個表的頭結點。

雙向鍊錶有直接前驅和直接後繼,很多地方與單鏈表相同,但是插入和刪除有很大不同,需同時修改前驅和後繼的指標.

順序表需要為其分配空間,單鏈表無需提前分配空間,在擴充時提高效率.

$儲存密度=資料元素本身占用的儲存量 /結點結構占用的儲存量 $

儲存密度越大儲存空間的利用率越高.如果每個元素資料域佔據的空間較小,則指標的結構性開銷就占用了整個結點的大部分空間,這樣儲存密度較小。例如,若單鏈表的結點資料均為整數,指標所占用的空間和整型量相同,則單鏈表的儲存密度為0.5。因此,如果不考慮順序表中的空閒區,則順序表的儲存空間利用率為100%, 而單鏈表的儲存空間利用率僅為50% .

(l)訪問元素的效率

順序表是由陣列實現的,它是一種隨機訪問結構,指定任意乙個位置序號i'都可以在0(1)時間內直接訪問該位置上的元素,即取值操作的效率高;而鍊錶是一種順序訪問結構,按位置訪問鍊錶中第!個元素時,只能從表頭開始依次向後遍歷鍊錶,直到找到第i個位置上的元素,時間複雜度為o(n), 即取值操作的效率低。基於此,若線性表的主要操作是和元素位置緊密相關的這類取值操作,很少做插入或刪除時,宜採用順序表作為儲存結構。

(2)插入和刪除操作的效率

對千煉表,在確定插入或刪除的位置後,插入或刪除操作無需移動資料,只需要修改指標,時間複雜度為0(1)。而對千順序表,進行插入或刪除時,平均要移動表中近一半的結點,時間複雜度為o(n)。尤其是當每個結點的資訊量較大時,移動結點的時間開銷就相當可觀。基千此,對千頻繁進行插入或刪除操作的線性表,宜採用鍊錶作為儲存結構。

1.先分別獲取la表長m和lb表長n。

2.從lb中第1個資料元素開始,迴圈n次執行以下操作:

1.建立乙個表長為m+n的空表lc。

2.指標pc初始化,指向lc的第乙個元素。

3.指標pa和pb初始化,分別指向la和lb的第乙個元素。

4.當指標pa和pb均未到達相應表尾時,則依次比較pa和pb所指向的元素值,從la或lb中"摘取「元素值較小的結點插入到lc的最後。

5.如果pb巳到達lb的表尾, 依次將la的剩餘元素插入lc的最後。

6.如果pa已到達la的表尾, 依次將lb的剩餘元素插入lc的最後。

1.指標pa和pb初始化,分別指向la和lb的第乙個結點。

2.lc的結點取值為la的頭結點。

3.指標pc初始化,指向lc的頭結點。

4.當指標pa 和 pb 均未到達相應表尾時,則依次比較pa和 pb 所指向的元素值,從 la 或lb中"摘取「元素值較小的結點插入到lc的最後。

5.將非空表的剩餘段插入到pc所指結點之後。

6.釋放lb的頭結點。

順序表及鍊錶

順序表 將表中元素乙個接乙個的存入一組連續的儲存單元中,這種儲存結構是順序結構。利用陣列單元的物理位置上的 優點 儲存空間連續,允許元素隨機訪問 缺點 長度固定,在分配記憶體之前要先確定好陣列長度,致使可能造成空間浪費 單鏈表 用一組任意的儲存單元存放線性表的元素,只包含指向下乙個節點的指標,只能單...

C C 利用鍊錶實現順序表的合併

預編譯區 include stdafx.h include include define ok 1 define error 0 define gt 1 define eq 0 define lt 1 using namespace std 資料結構宣告區 typedef struct lnodel...

關於線性表(順序表 鍊錶)的合併問題

如下 include include using namespace std define num 10 pragma warning disable 4996 typedef struct student stu typedef struct student stu typedef struct ...