C语言高手帮我给看下
来源:百度知道 编辑:UC知道 时间:2024/06/08 16:34:46
void change()
{
STU *p1, *p2;
long int num;
if(head == NULL)
{
printf("无学生记录!\n");
return;
}
printf("请输入您要修改的学生的学号:");
scanf("%ld", &num);
p1 = head;
while(num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
devise(p1);
else
printf("没有该学生记录,请核对!\n");
} 中p2=p1有什么作用!
{
STU *p1, *p2;
long int num;
if(head == NULL)
{
printf("无学生记录!\n");
return;
}
printf("请输入您要修改的学生的学号:");
scanf("%ld", &num);
p1 = head;
while(num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
devise(p1);
else
printf("没有该学生记录,请核对!\n");
} 中p2=p1有什么作用!
p2 = p1;
p1 = p1->next;
这两句要和在一起看。
其实就是一个链表的遍历,
用两个指针,一个指向当前节点,一个指向它的前驱节点。
这样一旦找到目标节点(需要删除,变更的节点),这时候P1指向该节点,
p2指向他的前一节点,
易于进行节点的删除,新增等操作
呃,应该是用来保存p1的值吧,程序不全,只能说这么多
因为p1 = head; 如果没有p2=p1直接执行p1 = p1->next会造成head的值被后面的数据覆盖掉.
让p2指向p1指向的地址,然后p1指向链表的下一个地址。
程序不全,不知道干吗的。
p2=p1;就是把p1所指的结点给p2;
p1=p1->next;就是把p1下一个结点给p1.
明白没有?朋友.
这个
p2=p1
p1=->next
是链表的尾插法