求一个创建单向链表简单代码,对于链表创建一头雾水
通俗的讲解一下
#include<stdio.h> struct student { int num; char name[15]; struct student *next; }; int main() { struct student a={1,"lihua"},b={2,"zhangjie"},c={3,"cuisun"}; struct student *head,*p; head=&a; a.next=&b; b.next=&c; c.next=NULL; for(p=head;p!=NULL;p=p->next) printf("%d %s\n",p->num,p->name); return 0; }初始化结构体变量,令第一个结点指针指向第二个结点,第二个结点指向第三个结点,依次类推。(静态链表适合长度固定结点个数较少时使用)
#define NULL 0 #define LEN sizeof(struct student) struct student { long num; float score; struct student *next; }; int n; struct student*creat() //建立链表结构指针函数定义 { struct student *head,*p1,*p2; n=0; p1=p2=(struct student*)malloc(LEN); //开辟动态储存空间,并将其地址赋给p1,p2 scanf("%ld%f",&p1->num,&p1->score); //往p1指向的空间结点填装数据 head=NULL; //头指针为空 while(p1->num!=0) { n=n+1; //以此来判断是第几个结点 if(n==1) head=p1; else p2->next=p1; //将p1的值赋给p2->next,使p2->next指向p1所指的结点,此时p2还在前一个结点 p2=p1; //将p1的值赋给p2,移动指针p2,使p2指向p1所指的结点 p1=(struct student*)malloc(LEN); //继续开辟空间,将其地址赋给p1 scanf("%ld%f",&p1->num,&p1->score); //往新开辟的结点填装数据 } p2->next=NULL; //将最后一个结点的指针域制空 return(head); //返回头指针 }