帮我解释一下这个C++程序

来源:百度知道 编辑:UC知道 时间:2024/06/24 12:53:22
每条语句都解释的详细一点
void Delete()//删除学生信息
{
char c;string no;
do
{
bool flag=0;
cout<<"请输入您要删除的学生的学号:"<<endl;
cin>>no;
student *q,*p;
q=head;
while(q->next!=NULL&&q->next->number!=no)q=q->next;
if(q->next!=NULL)
{
flag=1;
p=q->next;
q->next=q->next->next;
amount--;
free(p);
cout<<".......删除成功!!!!!!"<<endl;
}
if(flag==0)
{cout<<"对不起!!!您要删除的学生不存在!!!!!"<<endl;
cout<<"您想继续删除吗?(y/n)"<<endl;
cin>>c;
while(c!='y'&&c!='n')
{
cout<<"指令错误!!!<请输入y/n!!>"<<endl;
cin>>c;
}
}
}
while(c=='y');
}

只需要解释其中的
while(q->next!=NULL&&q->next->number!=no)q=q->next;
if(q->next!=NULL)
{
flag

q指向的是一个链表头

while(q->next!=NULL&&q->next->number!=no)q=q->next;
如果q当前位置不是链表的尾并且q下一位置的学号不是要查找的学号.则q不断向下移动,直到不满足条件为止.

if(q->next!=NULL)
{
flag=1;
p=q->next;
q->next=q->next->next;
amount--;
free(p);
cout<<".......删除成功!!!!!!"<<endl;
}
如果q不是链表尾部.那么q下一结点的学号则就是要查找的结果.删除这个指定结点

这个是一个链表类的成员函数
------还是解释多点代码吧,省的没头没尾的
q=head; //定义q是指向头结点
while(q->next!=NULL&&q->next->number!=no)q=q->next;
//当条件满足(q指向节点的下一个节点不为空,且此节点与no不相等)
//则把q指向下一个节点
//执行完以上循环 就完成了查找过程,然后下面分两个方面考虑
if(q->next!=NULL)
//q->next不为空的话说明找到了要删的节点,(满足q->next->number==no)
//以下执行删除该节点*(q->next)
{
flag=1;
p=q->next;
q->next=q->next->next;
amount--; //这个应该是链表类中用来统计节点数的对象
free(p); //删除节点
cout<<".......删除成功!!!!!!"<<endl;
}