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有什么作用!

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
是链表的尾插法