实现原理:指针
用malloc动态获取空间 ,须要的时候再获取,节省内存,也能够free掉,比较自由。code
首先须要3个指针,一个用来指向链首(*head),一个用来指向新开辟节点(*p1),一个用来指向链尾(*p2)。内存
首先head指针指向NULL,p1和p2都指向新开辟的节点:(新开辟节点由p1牵引)get
当获取的节点有效io
{ 第一个获取的节点则head指向第一个节点。当不是第一个节点时则p2->next指向这个节点,而后p2=p1.(p2后移,保证p2指向最后一个节点。)class
p1继续开辟新节点,进入二次循环。原理
}循环
完整代码:float
#include<stdio.h> #include<stdlib.h> #define LEN sizeof(struct Student) struct Student { int num; float score; struct Student *next; }; int n; struct Student *creat(void) { struct Student *head; struct Student *p1,*p2; n=0; p1=(struct Student*)malloc(LEN); //p1=p2; scanf("%d%f",&p1->num,&p1->score); head=NULL; while(p1->num!=0) { n=n+1; if(n==1)head=p1; else p2->next=p1; p2=p1; p1=(struct Student *)malloc(LEN); scanf("%d%f",&p1->num,&p1->score); } p2->next=NULL; return (head); } main() { struct Student *pt;//define a point printf("running type:ok\n"); pt=creat();//get the head of link printf("program type:ok\n"); if(pt!=NULL) do{ printf("\n%d\t%f",pt->num,pt->score); pt=pt->next; }while(pt!=NULL); printf("\nall is:ok!\n"); system("pause"); return 0; }