求大神,关于c语言删除函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求大神,关于c语言删除函数相关的知识,希望对你有一定的参考价值。

void deletel(struct st *head)

stud *p,*q;
char c,N[10];
char Num[15];
int m;
p=head;
p=(stud *)malloc(sizeof(stud));
q=(stud *)malloc(sizeof(stud));
q=p->next;
p=head;
if(p->next!=NULL)

printf("1--按姓名删除,2--按学号删除\n");
printf("你的选择是\n");
scanf("%d",&m);
getchar();
switch(m)

case 1: printf("你要删除人的姓名为\n");
gets(N);
while((p!=NULL)&&(strcmp(p->name,N)!=0))

p=p->next;

break;
case 2:
printf("你要删除的人的学号为\n");
gets(Num);
while((p!=NULL)&&(strcmp(p->num,Num)!=0))

p=p->next;

break;
default :printf("输入错误:\n");


q=p->next;
if(q==NULL)
printf("未找到指点节点,没有执行删除\n");return;
printf("你要删除人的信息为\n");
printf("学号 姓名 性别 出生年月 年龄 电话\n");

printf("%-14s%-10s%-8s%-12s%-8d%-15s\n",p->num,p->name,p->sex,p->born,p->age,p->tel);

printf("你确定删除此人,y——删除,n——不删除\n");
c=getchar();
if(c=='y')

p->next=q->next;
free(q);
return;

return;

1. 函数开始的时候这两句话没有意义
p=(stud *)malloc(sizeof(stud));
q=(stud *)malloc(sizeof(stud));
你只是用了这两个指针,为它们分配空间一是没必要,二是内存会泄露
2. 看你的代码应该是有头结点的链表,搜索的时候p=head;p初始化为了head,指向了头结点,搜索的时候应该从p->next开始,而你用的while((p!=NULL)&&(strcmp(p->name,N)!=0)),应该用p->next!=NULL。而且后面删除的时候也删除的是p->next,所以比较的话也应该用p->next:strcmp(p->next->name,N)
参考技术A 楼上是正解,采纳他的第二条建议可解决问题;采用第一条可提高程序性能。

以上是关于求大神,关于c语言删除函数的主要内容,如果未能解决你的问题,请参考以下文章

C语言,求15以内的素数,关于num=1时,怎么修改?求大神

关于用C语言求一个小数求小数点后面的位数多少的问题,求大神解答。

C语言中,函数是不是可以直接或间接调用自己!!求大神!!求解析!!!

C语言实验题 求大神指点

大神求解,C语言问题

C语言大神求指点啊,帮忙改正以下商品查询函数search();