乙個單向鍊錶基本由兩個元素組成,即資料字段和指標,而指標通常指向下乙個節點記憶體所在的位址。
最後乙個節點沒有其他節點可以連線,因此指標的值為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 堆
堆序性質 和普通的樹不同的是,堆具有堆序性質。所謂堆序性質,即堆的根節點要比所有字節點大,並且遞迴地具有此性質。即樹根比左孩子和右孩子要大,同時左孩子在左子樹中最大,右孩子在右子樹中最大。結構性質 類似完全二叉樹,底層上的元素被全部填滿,底層從左往右填入元素。二叉堆即每個節點最多只有兩個節點的堆結構...