这段代码不是太能看懂,能解释一下吗
void Add(pnode phead)
{
pnode p=phead;
int i=0;
struct Student stu;//学生结构体
int loc;//插入结点的位置
printf("请输入插入学生的位置:");
scanf("%d",&loc);
while(NULL!=p&&i<loc-1)
{
p=p->pnext;
i++;
}
if(NULL==p||i>loc)
{
printf("插入结点的位置不存在!\n");
return;
}
printf("你将在第%d个学生后面插入一个学生\n",loc-1);
printf("请输入第%d个学生的姓名:",loc);
scanf("%s",stu.Name);
printf("请输入第%d个学生的学号:",loc);
scanf("%d",&stu.Num);
printf("请输入第%d个学生的计算机成绩:",loc);
scanf("%f",&stu.Computer);
printf("请输入第%d个学生的高数成绩:",loc);
scanf("%f",&stu.Math);
printf("请输入第%d个学生的大英成绩:",loc);
scanf("%f",&stu.English);
stu.Total=stu.Computer+stu.Math+stu.English;//计算总分
stu.Ave=stu.Total/3.0f;//计算平均分
pnode pnew=(pnode)malloc(sizeof(node));
if(NULL==pnew)
{
printf("动态内存分配失败,程序终止!\n");
exit(-1);
}
pnew->st=stu;
pnode q=p->pnext;
p->pnext=pnew;
pnew->pnext=q;
}
c语言链表插入功能代码理解
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- it_hao528 2022-07-13 12:35关注
1、通过循环while(NULL!=p&&i<loc-1)查找插入的位置对应的前节点p
2、如果p存在录入学生信息
3、pnode pnew=(pnode)malloc(sizeof(node));分配要插入的节点内存
4、pnew->st=stu;将录入的学生信息赋值给节点
5、进行插入操作,即数据交换
pnode q=p->pnext; // 先将p的子节点pnext赋值给q
p->pnext=pnew; // 将新的pnew赋值p的子节点pnext
pnew->pnext=q; // 将q赋值给pnew的子节点完成插入功能本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥50 关于#html5#的问题:H5页面用户手机返回的时候跳转到指定页面例如(语言-javascript)
- ¥15 无法使用此凭据登录,因为你的域不可用,如何解决?(标签-Windows)
- ¥15 yolov9的训练时间
- ¥15 二叉树遍历没有报错但无法正常运行
- ¥15 在linux系统下vscode运行robocup3d上场球员报错
- ¥15 Python语言实验
- ¥15 SAP HANA SQL 增加合计行
- ¥20 用C#语言解决一个英文打字练习器,有偿
- ¥15 srs-sip外部服务 webrtc支持H265格式
- ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动