• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言中链表怎么删除结点?

原作者: [db:作者] 来自: [db:来源] 收藏 邀请


第一个方法:

/*根据姓名删除链表的中的学生记录*/
void  deleteByName(struct STUDENT * head)
{
    struct STUDENT *p,*q;
    char name[20];

    if(head==NULL)
    {
        printf("链表为空。\n");
        return;
    }

    printf("请输入要删除的学生的姓名:");
    scanf("%s",name);
    for(p=head->next,q=head;p!=NULL;p=p->next,q=q->next)
    {
        if(strcmp(p->name,name)==0)
        {
            q->next=p->next;
        }
    }
    if(p==NULL)
        printf("要删除的学生不存在。");
    else
        free(p);
}

 

这个方法主要是 q->next=p->next ,然后释放 p结点所占的内存空间。

 

第2个方法:

/***************

函数功能:
删除出勤学生姓名
返回:指向链表表头的指针

/***************/

struct student * del_message(struct student* head)
{   
    FILE* fp;
    struct student* pointer,*temp; //p指向新的结点  temp指针为临时结点
     
    InputBox(stu.ID,11,"请输入要删除学生姓名的学号");    
    fp=fopen("student.txt","wb+");
    pointer=head->next;  //从头结点开始遍历指向下一个节点
    
    while(pointer!=NULL) //如果遍历不到空数据的话就一直遍历
    {  
      
         if(strcmp(pointer->ID,stu.ID)==0)  //找到要删除的结点
        {    

            temp=pointer;     //将找到的结点赋值给临时temp结点变量
            pointer=pointer->next;  // 将p结点的下一个节点 赋值给p结点
             free(temp); //释放临时temp结点所占内存
           
            while(pointer!=NULL)  //将剩下的结点写入
            {    
                fwrite(pointer,sizeof(struct student),1,fp);
                pointer=pointer->next;
            }    
            break;
        } 
        fwrite(pointer,sizeof(struct student),1,fp);  //开始遍历链表结点,并写入文件
        pointer=pointer->next; //p指针指向新的结点(下一个结点)
    } 
    fclose(fp);
    outtextxy(220, 200, "删除出勤学生成功!");
    return head;
}


这个方法先找到p结点,也就是要删除的结点,然后将其赋值给一个临时的temp结构变量,然后p结点的下一个结点赋值给p结点,最后释放temp结点所占用的内存。

             temp=pointer;     //将找到的结点赋值给临时temp结点变量
             pointer=pointer->next;  // 将p结点的下一个节点 赋值给p结点
             free(temp); //释放临时temp结点所占内存

第二个方法是是从文件中读写链表结构。

 

不知道两种方法是否一样?

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++this指针详解发布时间:2022-07-13
下一篇:
C#实现路由器断开连接,更改公网ip发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap