鏈表的制作:
首先弄一個節(jié)點(diǎn)(聲明一個結(jié)構(gòu)體,里面由數(shù)據(jù)域和指針域組成)
數(shù)據(jù)域?qū)憙?nèi)容,指針域用來指向下一個節(jié)點(diǎn),通過一個節(jié)點(diǎn)連一個節(jié)點(diǎn)串起來形成一個鏈表粉臊。
鏈表的每一個節(jié)點(diǎn)都需要動態(tài)分配內(nèi)存,并用一個指針保存它的地址驶兜。
要完成鏈表需要利用三個指針扼仲,一個頭指針(記為a)(保存鏈表的首個節(jié)點(diǎn)的地址),兩個其他指針(記為b和c)(c動態(tài)分配內(nèi)存創(chuàng)建節(jié)點(diǎn)抄淑,b的指針域指向c)屠凶。
鏈表內(nèi)容的讀取:
一個簡單的鏈表代碼:
#include
#include
int main() {
//聲明一個節(jié)點(diǎn)
? ? typedef struct student{
//數(shù)據(jù)域
? ? ? ? int age;
? ? ? ? //指針域
? ? ? ? struct student*next;
? ? }Student;? /**Student為變量別名**/
? ? //創(chuàng)建3個結(jié)構(gòu)體指針,a為頭指針
? ? Student*a,*b,*c;
? ? //頭指針必須指向首個節(jié)點(diǎn)
? ? ? a = b = (Student*)malloc(sizeof(Student));
? ? ? //往結(jié)構(gòu)體的數(shù)據(jù)域中寫東西
? ? ? ? b->age =9;
? ? for(int i =0;i<3;i++){
//利用c動態(tài)分配內(nèi)存創(chuàng)建新節(jié)點(diǎn)
? ? ? ? c = (Student*)malloc(sizeof(Student));
? ? ? ? //往c的數(shù)據(jù)域里寫東西肆资,將b的指針域指向c,將c這個地址賦值給b用來實(shí)現(xiàn)鏈表的創(chuàng)建
? ? ? ? c->age=10+i;b->next = c; b = c;
? ? ? ? //執(zhí)行循環(huán)創(chuàng)建鏈表
? ? }
//將最后一個節(jié)點(diǎn)的指針域賦值為NULL
? ? b->next =NULL;
? ? //利用指針是否為空進(jìn)行循環(huán)
? ? while(a !=NULL){
//節(jié)點(diǎn)中內(nèi)容的讀取
? ? ? ? printf("%d ",a->age);
? ? ? ? //將下一個節(jié)點(diǎn)地址賦值給a以便讀取下一個節(jié)點(diǎn)的內(nèi)容
? ? ? ? a = a->next;
? ? }
return 0;
}