鏈表的輸出就是一次輸出鏈表中各個(gè)結(jié)點(diǎn)的數(shù)據(jù)或輸出某個(gè)結(jié)點(diǎn)的數(shù)據(jù)。
輸出單鏈表的程序設(shè)計(jì)思想如下:
定義一個(gè)結(jié)點(diǎn)結(jié)構(gòu)體指針變量p 讓p指向鏈表的第一個(gè)結(jié)點(diǎn)即頭指針?biāo)赶虻慕Y(jié)點(diǎn)使用當(dāng)型循環(huán),循環(huán)的條件是p所指向的結(jié)點(diǎn)成員point不是NULL,在循環(huán)體中執(zhí)行的下面的操作:(1)輸出指針變量p所指向結(jié)點(diǎn)的數(shù)據(jù)(2)讓指針變量p指向鏈表的下一個(gè)結(jié)點(diǎn)
(3)繼續(xù)下一輪的循環(huán)實(shí)例:建立一個(gè)含有4個(gè)學(xué)生信息的單向鏈表,輸入一些數(shù)據(jù),然后輸出。
#include <stdio.h>#include <stdlib.h>#include <string.h>struct student{ int number ; char name[20] ; float score ; struct student *point ;};void main(){ struct student *head ,*end ,*next ,*p ; int i ; int snumber ; char sname[20] ; float sscore ; head = (struct student *)malloc(sizeof(struct student)) ; if (head == NULL) PRintf("failure!/n") ; else { printf("Succeed!/n") ; scanf("%d,%f",&snumber,&sscore); scanf("%s",&sname); head->number = snumber ; strcpy(head->name,sname); head->score = sscore ; head->point = NULL ; //設(shè)置當(dāng)前節(jié)點(diǎn)為尾節(jié)點(diǎn) end=head ; // 讓end指向尾節(jié)點(diǎn) for (i=1 ; i<4 ; i++) { next = (struct student *)malloc(sizeof(struct student)) ; //開辟新節(jié)點(diǎn) scanf("%d,%f",&snumber,&sscore); scanf("%s",&sname); next->number = snumber ; strcpy(next->name,sname); next->score = sscore ; next->point = NULL ; //置新節(jié)點(diǎn)為尾節(jié)點(diǎn) end->point=next ; //讓原來的尾節(jié)點(diǎn)中的指針指向新節(jié)點(diǎn) end=next; } } p = head ; printf("number name score/n") ; while (p->point != NULL) { printf("%d %s %f/n",p->number,p->name,p->score) ; p=p->point ; } printf("%d %s %f/n",p->number,p->name,p->score) ; }運(yùn)行結(jié)果:

二、指針分析

當(dāng)程序執(zhí)行完
end = head ; 之后,end和head的內(nèi)容完全相同,此時(shí)兩者的point成員均是NULL,在程序執(zhí)行到end = next ;之后,head和next中的成員變量point的值均變成了next的地址,以此將鏈表的頭指針與后面結(jié)點(diǎn)連接起來。監(jiān)視結(jié)果:
新聞熱點(diǎn)
疑難解答