链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址。因此,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。
静态链表:不是临时开辟的,也不能用完后释放
#include<stdio.h>
struct Student///声明结构体类型struct Student
{
int num;
float score;
struct Student *next;
};
int main()
{
struct Student a,b,c,*head,*p;///定义3个结构体变量a,b,c作为链表的结点
a.num=10101;a.score=89.5;///对结点a的num和score成员赋值
b.num=10103;b.score=90;///对结点b的num和score成员赋值
c.num=10107;c.score=85;///对结点c的num和score成员赋值
head=&a;///将结点a的起始地址赋值给头指针head
a.next=&b;///将结点b的起始地址赋值给a结点的next成员
b.next=&c;///将结点c的起始地址赋值给a结点的next成员
c.next=NULL;///c结点的next成员不存放其他结点地址
p=head;///使p也指向a结点
do
{
printf("%ld %5.1f\n",p->num,p->score);///输出p指向的结点的数据
p=p->next;///使p指向下一节点
}while(p!=NULL);///输出完c节点后p的值为NULL,循环终止
return 0;
}