kristimn 2022-07-13 11:56 采纳率: 100%
浏览 28
已结题

c语言链表插入功能代码理解

这段代码不是太能看懂,能解释一下吗
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;
}

  • 写回答

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的子节点完成插入功能

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月21日
  • 已采纳回答 7月13日
  • 创建了问题 7月13日

悬赏问题

  • ¥15 matlab调用stl文件时报错说内存不足
  • ¥20 医学图像格式、医学图像后处理
  • ¥15 MATLAB中的矩阵分离问题
  • ¥15 服务端可运行语言,解析unity文件
  • ¥15 英飞凌TC387使用MCAL唤醒TJA1145问题
  • ¥15 android tv图标显示异常
  • ¥20 (标签-AR|关键词-预测分析)
  • ¥15 QT IFW 自定义界面添加lineedit小键盘输入数字无效果
  • ¥15 python thinter动态建立Entry并读取数据
  • ¥150 电路仿真,演示反激变压器升压