求大神,关于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;
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语言求一个小数求小数点后面的位数多少的问题,求大神解答。