【正文】
2022/7/10 56/60 鏈表的插入操作 ? 若原鏈表為非空,則按節(jié)點(diǎn)值(假設(shè)已按升序排序)的大小確定插入新節(jié)點(diǎn)的位置 ? 若在頭節(jié)點(diǎn)前插入新節(jié)點(diǎn),則將新節(jié)點(diǎn)的指針域指向原鏈表的頭節(jié)點(diǎn) , 且讓 head指向新節(jié)點(diǎn) head 待插入節(jié)點(diǎn) data next p (2) head = p data next data next data ∧ (1) pnext = head 2022/7/10 57/60 data next 鏈表的插入操作 ? 若在鏈表中間插入新節(jié)點(diǎn),則將新節(jié)點(diǎn)的指針域指向下一節(jié)點(diǎn)且讓前一節(jié)點(diǎn)的指針域指向新節(jié)點(diǎn) 待插入節(jié)點(diǎn) data next p (2) prnext = p data next data next data ∧ (1) pnext = prnext pr 2022/7/10 58/60 data next 鏈表的插入操作 ? 若在表尾插入新節(jié)點(diǎn),則末節(jié)點(diǎn)指針域指向新節(jié)點(diǎn) 待插入節(jié)點(diǎn) data next p (1) prnext = p pr data ∧ 原末節(jié)點(diǎn) next ∧ 2022/7/10 59/60 鏈表的輸出 ? 遍歷鏈表的所有節(jié)點(diǎn) head data next data next data ∧ p p p p ∧ 2022/7/10 60/60 ? Questions and answers 。 pnext = NULL。 }。 2022/7/10 49/60 data next head data next data next data NULL 數(shù)據(jù)域:存儲(chǔ)數(shù)據(jù)元素信息 指針域:存儲(chǔ)直接后繼的節(jié)點(diǎn)信息 鏈表的定義 ? 鏈表 ( Linked Table) :線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) – 為表示每個(gè)元素與后繼元素的邏輯關(guān)系,除存儲(chǔ)元素本身信息外,還要存儲(chǔ)其直接后繼信息 struct Link { int data。 struct Link *next。 }。 結(jié)構(gòu)體聲明時(shí)不能包含本結(jié)構(gòu)體類型成員, 系統(tǒng)將無(wú)法為這樣的結(jié)構(gòu)體類型分配內(nèi)存 可包含指向本結(jié)構(gòu)體類型的指針變量 問(wèn)題的提出 2022/7/10 47/60 —— 單向鏈表 struct Link { int data。 struct temp *pt。temp39。pt39。pt39。 }。 其值為 2 其值為 1 2022/7/10 46/60 ? 下面的結(jié)構(gòu)是什么意思? struct temp { int data。 answer = yes。 enum response answer。 enum weeks today。 i ch fprintf(%d\n, sizeof(union sample))。 }。 char ch。 }。 char ch。 return p。 = 5。 }。 int month。 pday = 22。 void func(struct date *p) { pyear = 2022。 int day。 } Before function call:1999/04/23 After function call:1999/04/23 結(jié)構(gòu)體 變量 作函數(shù)參數(shù) 【 例 】 2022/7/10 33/60 struct date { int year。 = 5。 }。 int month。 STUDENT *pt = stu。stu[0]。 ? 如何定義指向 結(jié)構(gòu)體數(shù)組 的指針? STUDENT *pt = stu。 STUDENT *pt。stu1。 STUDENT stu1。 (*pt). birthday. year = 1999。 pt studentID = 1。 p