链表的c语言实现(五)

链表的c语言实现(五),第1张

链表的c语言实现(五),第2张

3.Delete
如果我们已经知道要删除的节点P的位置,那么在删除节点P时,我们只需要将节点P的前任节点的链域作为存储节点P的后继节点的地址,回收节点P即可
下面是一个应用删除算法的例子:
# include
# include
# define n10

typedef结构节点
{
char name[20];
struct node * link;
}梭哈;

Stud * creat(int n) /*构建新链表的函数*/
{
stud *p,*h,* s;
int I;
if((h =(stud *)malloc(sizeof(stud)))= = null)
{
printf("无法分配内存空!");
退出(0);
}
h--> name[0]= ' \ 0 ';
h-> link = NULL;
p = h;
for(I = 0;I {
if((s =(stud *)malloc(sizeof(stud)))= = null)
{
printf("无法分配内存空!");
退出(0);
}
p-> link = s;
printf("请输入%d人的姓名",I 1);
scanf("%s ",s-> name);
s-> link = NULL;
p = s;
}
return(h);
}

Stud * search(stud *h,char *x) /* search函数*/
{
stud * p;
char * y;
p = h-> link;
while(p!= NULL)
{
y = p-> name;
if(strcmp(y,x)= = 0)
return(p);
else p = p-> link;
}
if(p = = null)
printf("找不到数据!");
}

Stud * search2(stud *h,char *x) /*另一个搜索函数,返回上一个搜索函数的直接前任节点的指针。*/
/*h是头指针,x是指向要搜索的名称的指针。*/
/*其实这个函数的算法和上面的搜索算法是一样的,只不过And s总是指向指针p所指向的节点的直接前任. */
/*结果返回s是要搜索的节点的上一个节点*/
{
stud *p,* s;
char * y;
p = h-> link;
s = h;
while(p!= NULL)
{
y = p-> name;
if(strcmp(y,x)= = 0)
return(s);
else
{
p = p-> link;
s = s-> link;
}
}
if(p = = null)
printf("没有找到数据!");
}

Void del(stud *x,stud *y) /* delete函数,其中y是要删除的节点的指针,x是要删除的节点的上一个节点的指针*/
{
stud * s;
s = y;
x-> link = y-> link;
免费;
}

main()
{
int number;
char full name[20];
stud *head,*searchpoint,* forepoint
number = N;
head = creat(number);
printf("请输入您要删除的人的名字:");
scanf("%s ",全名);
searchpoint=search(head,full name);
forepoint=search2(head,full name);
del(forepoint,search point);

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 链表的c语言实现(五)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情