求一个创建单向链表简单代码,对于链表创建一头雾水
通俗的讲解一下
2012-03-17 17:03
2012-03-17 20:41
程序代码:#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;
}
初始化结构体变量,令第一个结点指针指向第二个结点,第二个结点指向第三个结点,依次类推。(静态链表适合长度固定结点个数较少时使用)
2012-03-18 17:50
2012-03-18 18:33
2012-03-18 18:40
程序代码:#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); //返回头指针
}

2012-03-18 22:05
2012-03-18 22:08
2012-03-19 18:26