演算法學習06 單鏈表

2021-10-19 07:33:21 字數 2021 閱讀 5551

乙個單向鍊錶基本由兩個元素組成,即資料字段和指標,而指標通常指向下乙個節點記憶體所在的位址。

最後乙個節點沒有其他節點可以連線,因此指標的值為null。

建立與遍歷

以動態分配產生鍊錶節點的方式,可以先行定義乙個類資料型別,要有乙個資料字段,接著在類中定義乙個指標變數,其資料型別與此類相同,作用是指向下一鍊錶節點。

遍歷單向鍊錶的過程,就是使用指標運算來訪問鍊錶中的每乙個節點,為了便於操作可以定義乙個指標變數作為鍊錶的讀取游標。

建立鍊錶有兩種方法,頭插法和尾插法,下面分別介紹。

頭插法每次在鍊錶的頭部插入,即插入位置是phead的下乙個,若想將pnewnode插入,首先將pnewnode的指標域指向phead->next,再將phead的指標域指向pnewnode

使用頭插法建立單鏈表

linklist creat_list

(linklist head)

return head;

}

尾插法

每次在尾部插入,就是最後乙個節點的後面插入,首先需要遍歷單鏈表,找到最後乙個節點。將最後乙個節點的指標域指向pnewnode,再將pnewnode的指標域指向null

使用尾插法建立單鏈表

建立第乙個節點head後,head->next賦值為null。此時這個節點既是頭結點,又是尾節點。因此將頭結點head的位址賦值給尾結點end。然後建立第二個節點,讓當前尾節點的指標域指向新節點,再將新節點變成尾結點。end->next=node;end=node;

相當於不斷插入新節點,將當前的尾結點的指標域指向新節點,再將新節點變為尾結點。這一過程中,尾結點的位置是不斷向後動態移動的。當不再有新節點插入時,將尾結點的指標域指向null

linklist creat_list

(linklist head)

end-

>next =

null

;}

完整**

#include

using

namespace std;

class

list

;typedef

class

list node;

typedef node* link;

intmain()

cout <<

"請依次輸入儲存元素: "

<< endl;

cin >> phead-

>data;

//輸入節點的資料

head = phead;

//保留煉表頭指標,以phead為指向當前節點的指標

for(

int i =

0; i < n -

1; i++

) cin >> newnode-

>data;

newnode-

>next =

null

; phead-

>next = newnode;

//把新節點加在鍊錶後面

phead = newnode;

//讓phead保持在鍊錶的最後面

} cout <<

"輸出資料: "

<< endl;

phead = head;

//讓phead回到煉表頭

while

(phead !=

null

)return0;

}

演算法學習之單鏈表

單鏈表 包含乙個未知型別的資料以及乙個指向下乙個結點的指標 1.初始化單鏈表 建立頭結點,令他的下一結點為空 2.插入元素 遍歷該鍊錶直到到達插入點,建立新結點,載入資料,插入鍊錶 3.輸出單鏈表 遍歷整個鍊錶輸出每個結點的資料 4.輸出單鏈表長度 5.判斷單鏈表是否為空 頭結點的指標是否為空 6....

演算法學習日記 單鏈表(1)

鍊錶是常用的線性資料結構。鍊錶的結構就好像是一列火車,每個車廂都代表乙個結點,結點與結點依次相連。單鏈表是所有鍊錶型別中最直接的,單鏈表中每個節點都存了指向下乙個節點的指標。單鏈表就像一列只能從車頭走到車尾的列車。單鏈表vs雙鏈表 雙鏈錶比單鏈表多乙個指向前乙個元素的指標。雙鏈表可以來回的遍歷整個鍊...

演算法學習06 堆

堆序性質 和普通的樹不同的是,堆具有堆序性質。所謂堆序性質,即堆的根節點要比所有字節點大,並且遞迴地具有此性質。即樹根比左孩子和右孩子要大,同時左孩子在左子樹中最大,右孩子在右子樹中最大。結構性質 類似完全二叉樹,底層上的元素被全部填滿,底層從左往右填入元素。二叉堆即每個節點最多只有兩個節點的堆結構...