?? 例11.8.txt
字號:
例11.8寫一函數建立一個有3名學生數據的單向動態鏈表?!? 先考慮實現此要求的算法(見圖11.12)。
設3個指針變量:head、p1、p2,它們都是用來指向struct student類型數據的。先用malloc函數開辟第一個結點,并使p1、p2指向它。然后從鍵盤讀入一個學生的數據給p1所指的第一個結點。我們約定學號不會為零,如果輸入的學號為0,則表示建立鏈表的過程完成,該結點不應連接到鏈表中。先使head的值為NULL(即等于0),這是鏈表為“空”時的情況(即head不指向任何結點,鏈表中無結點),以后增加一個結點就使head指向該結點。
如果輸入的p1->num不等于0,則輸入的是第一個結點數據(n=1),令head=p1,即把p1的值賦給head,也就是使head也指向新開辟的結點(圖11.13 )。p1所指向的新開辟的結點就成為鏈表中第一個結點。然后再開辟另一個結點并使p1指向它,接著輸入該結點的數據(見圖11.14(a))。如果輸入的p1->num≠0,則應鏈入圖11.13第2個結點(n=2),由于n≠1,則將p1的值賦給p2->next,此時p2指向第一個結點,因此執行“p2->next=p1” 就將新結點的地址賦給第一個結點的next成員,使第一個結點的next成員指向第二個結點(見圖11.14(b))。接著使p2=p1,也就是使p2指向剛才建立的結點,見圖11.14(c)。接著再開辟一個結點并使p1指向它,并輸入該結點的數據(見圖11.15(a)),在第三次循環中,由于n=3(n≠1),又將p1的值賦給p2->next,也就是將第3個結點連接到第2個結點之后,并使p2=p1,使p2指向最后一個結點(見圖11.15(b))。
再開辟一個新結點,并使p1指向它,輸入該結點的數據(見圖11.16(a))。由于p1->num的值為0,不再執行循環,此新結點不應被連接到鏈表中。此時將NULL賦給p2->next,見圖11.16(b)。建立鏈表過程至此結束,p1最后所指的結點未鏈入鏈表中,第3個結點的next成員的值為NULL,它不指向任何結點。雖然p1指向新開辟的結點,但從鏈表中無法找到該結點。
建立鏈表的函數可以如下:
#define NULL 0
#define LEN sizeof(struct student)
struct student
{long num;
float score;
struct student
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -