《C C 學習指南》語法篇 筆記 (十一 鍊錶)

2021-10-08 20:08:40 字數 2055 閱讀 3327

鍊錶概念

資料結構裡的一種型別:把若干個物件用指標串聯起來,形成乙個鏈狀的資料結構,稱之為「鍊錶」。

struct student

下面構建乙個鍊錶:

//① 先準備好四個物件

student ss[4]

=,,,

}//② 把四個物件串起來

ss[0

].next =

&ss[1]

;ss[1]

.next =

&ss[2]

;ss[2]

.next =

&ss[3]

;ss[3]

.next =

0;

串起來的鍊錶,只需要知道「煉表頭」,就可以訪問到鍊錶中的每乙個物件。方法是從頭開始,使用next指標來訪問下乙個物件。鍊錶的遍歷 注:鍊錶中最後乙個物件的next為null,根據這一特徵判斷鍊錶的結束。

student* p =

&ss[0]

;while

(p)

鍊錶特徵:

有頭鍊錶的構造(插入/刪除操作簡單)

無頭鍊錶:所有的節點都都包含了有效資料,上面的情況。

有頭鍊錶:用乙個固定的頭節點來指代整個鍊錶,所有的物件掛在這個頭節點下面,而頭節點本身不包含有效資料。當鍊表中只有0個物件的時候也可以表示。

定義乙個有頭鍊錶

只需要定義乙個物件作為其頭節點,將成員next初始化為null。當有物件假如時,直接加在它後面,當它的next為null時,表示該鍊錶乙個物件也沒有。(頭節點只用於掛接,自身不算做長度)

//定義乙個頭節點

student m_head =

;student m_head =

;//插入乙個物件到鍊錶中(新增到頭)

void

add1

(student* obj)

//插入乙個物件到鍊錶中(新增到末尾)

void

add2

(student* obj)

鍊錶中的物件 obj 從哪來:

鍊錶中的物件,一般都是動態建立的。 (生命期 malloc -free)

student* obj =

(student*

)malloc

(sizeof

(student));

obj-

>id =12;

strcpy

(obj-

>name,

"nn");

add(obj)

;

有頭節點的遍歷:

void

show_all()

}

插入與刪除節點

按順序插入節點:

在插入時,遍歷列表,比較id值,找到目標位置,並記錄前乙個節點pre。新節點直接掛在pre後面就行了。

int

insert

(student* obj)

//插入到pre節點後面

obj-

>next = pre-

>next;

pre-

>next = obj;

return0;

}

刪除節點:

找到這個節點,並記錄該節點的前乙個節點pre。

void

remove

(int id)

pre = cur;

cur = cur-

>next;

//往後走

}}

鍊錶與陣列比較

陣列:如果在中間插入/刪除乙個物件,那麼要把後面所有的元素後移,花費時間多

鍊錶:在中間插入/刪除乙個物件,不需要資料移動,直接掛在鏈條中即可。

鍊錶比陣列適合插入/刪除操作,效能較高。

《C C 學習指南》語法篇 筆記 (六 語句)

if else 條件判斷 if exper statement1 符合語句帶大括號 else statement2 switch case 條件判斷 ecpr 表示式,其值必須是整型 option 常量,必須是整型 default 預設標籤 break 跳出復合語句,switch語句是直接跳到opt...

《C C 學習指南》語法篇 筆記 (十 結構體)

c c 的基本資料型別 char short float double 陣列,指標 將基本的資料型別組合起來,形成新的資料型別 自定義型別 例如 定義乙個新型別 student,成員變數有 name id grade struct student 結構體基本形式 基本形式 其中,struct是關鍵字...

C C 學習筆記 C提高 鍊錶

陣列和鍊錶的區別 陣列 一次性分配一塊連續的儲存區域。優點 隨機訪問元素效率高 缺點 1 需要分配一塊連續的儲存區域 很大區域,有可能分配失敗 2 刪除和插入某個元素效率低 鍊錶 無需一次性分配一塊連續的儲存區域,只需分配n塊節點儲存區域,通過指標建立關係。優點 1 不需要一塊連續的儲存區域 2 刪...