...看了书但有的还是不理解。。。应该怎样学习这部分啊。。。有什 ...
发布网友
发布时间:2024-04-10 11:24
我来回答
共1个回答
热心网友
时间:2024-04-11 11:11
首先,链表是由结点组成的,结点是一个结构体类型,例如struct student{long num; float score; struct student *next;}就是一个结点(他的类型是struct student结构体类型,注意他的最后一个元素struct student *next意思是指向struct student结构体类型的指针)。下面举例说明结点是怎样连结起来的(头文件省略):
struct student
{long num;
float score;
struct student *next;} /*声明“struct student结构体类型”*/
struct student *creat(void) /*定义函数。此函数带回一个指向链表头的指针*/
{struct student *head;
struct student *p1, *p2;
int n=0;
p1=p2=(struct student *) malloc(sizeof(struct student ));
这里说明一下,sizeof(struct student )是测量struct student结构体的字节数,malloc()的作用是在内存的动态存储区中分配一个适当长度的连续空间,来存放结点。
scanf("%d,%f",&p1->num,&p1->score); /*建立一个结点,指针变量p1,p2都指向它,也就是把结构体的首地址放在p1,p2中*/
head=NULL;
while(p1->num!=0)
{
n=n+1;
if(n==1)head=p1; /*n=1表示第一个结点,用head指向它,作为表头*/
else p2->next=p1; /*从第二个结点开始,令上一个结点的next元素指向它,这样就连起来了*/
p2=p1;
p1=(struct student *) malloc(sizeof(struct student ));
scanf("%d,%f",&p1->num,&p1->score);
}
p2->next=NULL;/*表示链表结束*/
return(head)
}
就是开始让p1,p2都指向一个结点;然后让p1再去开发下一个结点,让p2的最后一个指针元素指向它;然后p2=p1;令p1再去开发下一个结点……以此类推