在C語(yǔ)言用自引用結(jié)構(gòu)實(shí)現(xiàn)鏈表結(jié)構(gòu)需要解決三個(gè)問(wèn)題
提問(wèn)人:楊紫紅發(fā)布時(shí)間:2020-11-17
(1)必須指出鏈表第一個(gè)結(jié)點(diǎn)的位置,否則無(wú)法存取該鏈表中的結(jié)點(diǎn)
實(shí)現(xiàn)方法:定義一個(gè)指向該結(jié)構(gòu)對(duì)象的指針,或定義一個(gè)該結(jié)構(gòu)類型的變量,使其指向鏈表的第一個(gè)結(jié)點(diǎn)即可。如:
struct node *head;
(2)在建立一鏈表時(shí),如何獲得下一個(gè)新的結(jié)點(diǎn)的存放空間。
實(shí)現(xiàn)方法:用C編譯系統(tǒng)提供的庫(kù)函數(shù)malloc(size)動(dòng)態(tài)分配存儲(chǔ)空間得到。
除此之外,還可用calloc函數(shù)。如:
struct node *p1, *p2;
…
p2=(struct node *) malloc(size(struct node));
或: p2=(struct node *) calloc(1, size(struct node));
if (p2= =NULL) exit(0);
p1->next=p2; /*此處設(shè)p1指向新結(jié)點(diǎn)的上一結(jié)點(diǎn)*/
另外:free函數(shù)可用于釋放內(nèi)存區(qū)。
如:free(p); 表示釋放由p指向的內(nèi)存區(qū),使這部分內(nèi)存區(qū)能被其他變量使用。
(3)要明確指出鏈表的鏈尾。
實(shí)現(xiàn)方法:通常把最后結(jié)點(diǎn)中的成員項(xiàng)next置為空指針NULL即可。
實(shí)現(xiàn)方法:定義一個(gè)指向該結(jié)構(gòu)對(duì)象的指針,或定義一個(gè)該結(jié)構(gòu)類型的變量,使其指向鏈表的第一個(gè)結(jié)點(diǎn)即可。如:
struct node *head;
(2)在建立一鏈表時(shí),如何獲得下一個(gè)新的結(jié)點(diǎn)的存放空間。
實(shí)現(xiàn)方法:用C編譯系統(tǒng)提供的庫(kù)函數(shù)malloc(size)動(dòng)態(tài)分配存儲(chǔ)空間得到。
除此之外,還可用calloc函數(shù)。如:
struct node *p1, *p2;
…
p2=(struct node *) malloc(size(struct node));
或: p2=(struct node *) calloc(1, size(struct node));
if (p2= =NULL) exit(0);
p1->next=p2; /*此處設(shè)p1指向新結(jié)點(diǎn)的上一結(jié)點(diǎn)*/
另外:free函數(shù)可用于釋放內(nèi)存區(qū)。
如:free(p); 表示釋放由p指向的內(nèi)存區(qū),使這部分內(nèi)存區(qū)能被其他變量使用。
(3)要明確指出鏈表的鏈尾。
實(shí)現(xiàn)方法:通常把最后結(jié)點(diǎn)中的成員項(xiàng)next置為空指針NULL即可。
繼續(xù)查找其他問(wèn)題的答案?
相關(guān)視頻回答
點(diǎn)擊加載更多評(píng)論>>