資料結構 單鏈表雙鏈表9 18

2021-07-22 20:16:05 字數 1246 閱讀 2065

單鏈表結點類node宣告如下,成員變數data表示結點的資料域,儲存資料元素,資料型別為t,next表示結點的指標域,儲存後繼結點的位址。檔名為node.h

template

class node

public;

t data;

node*next;

node()

this->next = null;

node(t data ,node *next = null)

this->data = data;

this->next = next;

node類的乙個物件表示單鏈表中的乙個結點。通過next鏈,將兩個結點連線起來。

插入操作:

空表插入:head = new node(x);

頭插入: node*q = new node (x);

q->next = head;

head = q;

中間插入\尾插入:

node*q = new node(x);

q->next = front->next;

front->next = q;

帶頭結點的單鏈表

帶頭結點的單鏈表是指,在單鏈表的第0個結點之前增加乙個特殊的結點,稱為頭結點,忽略其資料域。此時,空單鏈表就只有乙個頭結點。頭結點的作用是,使得所有鍊錶(包括空表)的頭指標非空,則對單鏈表的插入,刪除操作不需要分割槽操作位置。

迴圈單鏈表

如果單鏈表最後乙個結點的next鏈儲存單鏈表的頭指標head值,則該單鏈表成為環形結構,稱為迴圈單鏈表,迴圈單鏈表的結點同單鏈表結點類node,當head->next == head時,迴圈單鏈表為空。其它操作演算法與單鏈表相同。差別是,插入結點時,執行下列下列語句,使之成為一條迴圈單鏈表,設rear指標指向單鏈表最後乙個結點。

rear->next = head;

雙鏈表每個結點有兩個位址域的線性鍊錶稱為雙鏈表,兩個位址域分別指向前驅結點和後繼結點。在單鏈表中,每個結點只有乙個指向後繼結點的鏈。若要查詢前驅結點,必須從單鏈表的頭指標開始沿著鍊錶方向逐個檢測,操作效率很低。此時,需要採用雙向鍊錶。

雙鏈表結點類

template

class doublenode

public;

t data;

doublenode*prev,*next;

doublenode()

doublenode(t data,doublenode*prev =null,doublenode*next = null)

資料結構 談談單鏈表和雙鏈表

陣列的特點 在記憶體中連續 利用下標定位元素,因此查詢操作的時間複雜度為o 1 增加與刪除元素時,需要進行移動,因此增加與刪除操作的時間複雜度為o n 陣列大小固定,不能直接擴容。如果需要擴容,也是建立乙個更大的陣列,再將元素複製過去。鍊錶的特點 在記憶體中可以不連續 增加與刪除元素的操作很方便,只...

回顧單鏈表,堆疊,佇列,雙鏈表資料結構

這幾個資料結構還是比較通俗易懂的,其中堆疊和佇列可以用陣列封裝實現,也可以用雙端鍊錶實現,等等不多複述。個人感覺資料結構真正複雜的是樹型結構,多叉樹,二叉樹,平衡二叉樹,b 樹,b 樹,紅黑樹,他們關係和區別,目前也說不清楚。這一塊是我感覺很薄弱的地方。簡單寫了個單鏈表,其他的懶得寫了,下篇開始搞搞...

資料結構 雙鏈表

typedef struct nodenode 雙鏈表的根節點的bwd指標指向雙鏈表的最後乙個節點,fwd指標指向雙鏈表的第乙個節點,雙鏈表的value欄位為空 以下程式是將乙個值插入到乙個有序的雙鏈表中,如果鍊錶中已經有和該值相同的節點則不插入 include include typedef st...