鍊錶概念
資料結構裡的一種型別:把若干個物件用指標串聯起來,形成乙個鏈狀的資料結構,稱之為「鍊錶」。
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 刪...