void deleted()
{
char s[80];
struct addr *p1,*p2,*info;
printf ("enter name:");
gets(s);
info=find(s);
if(info!=NULL)
{
if (head==info)
{
head=info->next;
printf ("deleted :%s\n",info->name);
free(info);
}
else
{
p1=head->next;
while(info!=p1)
{
p2=p1;
p1=p1->next;
}
p2->next=p1->next;
printf ("deleted:%s\n",info->name);
free(info);
}
}
else
printf ("%s not find!\n",info->name);
}
删除是通过哪个代码实现的?题中我认为是通过删除p2来达到删除s[80]里面的记录的。但是却找不到p2与s[]之间的联系。
请大侠详细解释一下!!!谢过
struct addr
{
char name[30];
char street[40];
char city[20];
char state[3];
char tel[11];
struct addr *next;
}
C语言中删除一条记录的疑问?
答案:2 悬赏:40
解决时间 2021-03-06 19:03
- 提问者网友:久伴不朽
- 2021-03-06 12:01
最佳答案
- 二级知识专家网友:我的任性你不懂
- 2021-03-06 13:27
printf ("enter name:");
gets(s);
info=find(s);
输入 字符串s,然后通过find(s)函数调用查找name等于s的结点,并返回结点赋值给变量info,
if (head==info)
{
head=info->next;
printf ("deleted :%s\n",info->name);
free(info);
}
如果要删除的是头结点,将下一个结点作为新的头结点,然后删除头结点
else
{
p1=head->next;
while(info!=p1)
{
p2=p1;
p1=p1->next;
}
p2->next=p1->next;
printf ("deleted:%s\n",info->name);
free(info);
}
查找到结点info,但非头结点,查找info的前一个结点p2,让p2->next指向info->next(while执行完后p1==info),即info的前一个结点指向info其后一个结点,然后删除info结点
gets(s);
info=find(s);
输入 字符串s,然后通过find(s)函数调用查找name等于s的结点,并返回结点赋值给变量info,
if (head==info)
{
head=info->next;
printf ("deleted :%s\n",info->name);
free(info);
}
如果要删除的是头结点,将下一个结点作为新的头结点,然后删除头结点
else
{
p1=head->next;
while(info!=p1)
{
p2=p1;
p1=p1->next;
}
p2->next=p1->next;
printf ("deleted:%s\n",info->name);
free(info);
}
查找到结点info,但非头结点,查找info的前一个结点p2,让p2->next指向info->next(while执行完后p1==info),即info的前一个结点指向info其后一个结点,然后删除info结点
全部回答
- 1楼网友:不傲怎称霸
- 2021-03-06 14:37
没有,txt文档不是数据库,只能是全部读出来,删除某些内容,然后再保存
另一个方法是新建一个文件,一行一行地复制过去,忽略你想删除的那行,直至源文件结束,这种方法换汤不换药,估计你也会。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯