代码和具体步骤解释如下。
以经典的学生编号为例。
#include <stdio.h>
#include <stdlib.h>
//开辟动态链表
//首先建立结构体
struct student
{
int num;
char name[20];
int score;
struct student *next;
} ;
int main()
{
//需要三个结构体指针:头,尾,移动指针,由移动指针和尾指针开辟新的结构体
struct student *head,*tail,*p;
//由于我们不知道这个结构体具体多大,使用动态开辟内存来新增结构体
p = (struct student*)malloc(sizeof(struct student));
//这第一个结构体是头结构体,因为现在只有一个,移动结构体指针和尾结构体指针现在
//也指向它。
head = p;
tail = p;
tail->next =NULL;
//通过循环输入学生信息
int n = 3;
for(int i = 0;i<n;i++)
{
p = (struct student*)malloc(sizeof(struct student));
//继续开辟新节点
printf("输入学号,姓名,分数\n");
scanf("%d",&p->num);
scanf("%s",&p->name);
scanf("%d",&p->score);
tail->next=p;//连接两个节点
tail = p;//将新的节点视为尾节点
tail->next = NULL;//尾节点的next结构为空
}
//输出链表
p = head->next;
while(p!=NULL)
{
printf("%d\n%s\n%d\n\n",p->num,p->name,p->score);
p=p->next;
}
return 0;
}
三个结构体指针是重点。