C语言中链表怎么删除结点?
第一个方法:
/*根据姓名删除链表的中的学生记录*/
void deleteByName(struct STUDENT * head)
{
struct STUDENT *p,*q;
];
if(head==NULL)
{
printf("链表为空。\n");
return;
}
printf("请输入要删除的学生的姓名:");
scanf("%s",name);
for(p=head->next,q=head;p!=NULL;p=p->next,q=q->next)
{
)
{
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,,"请输入要删除学生姓名的学号");
fp=fopen("student.txt","wb+");
pointer=head->next; //从头结点开始遍历指向下一个节点
while(pointer!=NULL) //如果遍历不到空数据的话就一直遍历
{
) //找到要删除的结点
{
temp=pointer; //将找到的结点赋值给临时temp结点变量
pointer=pointer->next; // 将p结点的下一个节点 赋值给p结点
free(temp); //释放临时temp结点所占内存
while(pointer!=NULL) //将剩下的结点写入
{
fwrite(pointer,,fp);
pointer=pointer->next;
}
break;
}
fwrite(pointer,,fp); //开始遍历链表结点,并写入文件
pointer=pointer->next; //p指针指向新的结点(下一个结点)
}
fclose(fp);
outtextxy(, , "删除出勤学生成功!");
return head;
}
这个方法先找到p结点,也就是要删除的结点,然后将其赋值给一个临时的temp结构变量,然后p结点的下一个结点赋值给p结点,最后释放temp结点所占用的内存。
temp=pointer; //将找到的结点赋值给临时temp结点变量
pointer=pointer->next; // 将p结点的下一个节点 赋值给p结点
free(temp); //释放临时temp结点所占内存
第二个方法是是从文件中读写链表结构。
不知道两种方法是否一样?
C语言中链表怎么删除结点?的更多相关文章
- C语言中链表任意位置怎么插入数据?然后写入文件中?
链表插入示意图:(图是个人所画)因为链表指针指来指去,难以理解,所以辅助画图更加方便. 插入某个学号后面图: 定义的结构体: struct student { ]; //学生学号 ]; //学生姓名 ...
- C语言中链表节点的实现,以及如何实现泛型
1.C语言中的struct是纯粹的结构体,没有访问权限的概念 2.C语言中用void* 来实现泛型编程,也是C++类和模板底层实现的基础,就是用void*来实现的 #include<stdio. ...
- Go语言中的切片(十)
go中数组的长度是固定的,且不同长度的数组是不同类型,这样的限制带来不少局限性.于是切片就来了,切片(Slice)是一个拥有相同类型元素的可变长度的序列.它是基于数组类型做的一层封装.它非常灵活,支持 ...
- 链表:删除链表中重复的结点(java实现)
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- C语言习题 链表建立,插入,删除,输出
Problem B: C语言习题 链表建立,插入,删除,输出 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 222 Solved: 92 [Subm ...
- YTU 2430: C语言习题 链表建立,插入,删除,输出
2430: C语言习题 链表建立,插入,删除,输出 时间限制: 1 Sec 内存限制: 128 MB 提交: 576 解决: 280 题目描述 编写一个函数creatlink,用来建立一个动态链表 ...
- C/C++语言实现单链表(带头结点)
彻底理解链表中为何使用二级指针或者一级指针的引用 数据结构之链表-链表实现及常用操作(C++篇) C语言实现单链表,主要功能为空链表创建,链表初始化(头插法),链表元素读取,按位置插入,(有序链表)按 ...
- PTA 链表删除结点的题目测试
链表删除结点 题目描述 输入一个正整数repeat(0 < repeat < 10),做repeat次下列运算: 输入一个正整数n(0 < n < 10)和一组( n 个 )整 ...
- 基于visual Studio2013解决C语言竞赛题之1069链表查找删除
题目 解决代码及点评 /* 功能:建立一个链表,每个结点包括:学号.姓名.性别.年龄.输入一个年龄,如果链表中的结点所包含的年龄等于此年龄, 将此结点删除,输出最后的链表. 时 ...
随机推荐
- 对datatable操作,查询
#region DataTable筛选,排序返回符合条件行组成的新DataTable或直接用DefaultView按条件返回 /// <summary> /// DataTable筛选,排 ...
- 奇怪的Hibernate——当?遇上%
今天写了一个模糊查询的SQL语句,发现了点有趣的东东 情景: 平时写模糊查询的时候是"select * from user where username like %?%" 然后就 ...
- Struts2与Struts的区别
Struts2与Struts的区别 从Struts2的发展过程来看,Struts2继承了Struts与WebWork的血脉,Struts2取两者之精华,形成新德框架,但是struts2还是更多的继承了 ...
- jquery.sobox 经典版弹窗控件
sobox 是一款非常实用的,基于 jQuery 的弹窗控件.功能非常完整,而代码量又非常少(压缩完仅8k不到)的一款弹窗控件,如果你熟悉ext的弹窗控件,那么sobox的使用对你来说应该是愉悦而完全 ...
- Permit.js – 用于构建多状态原型的 jQuery 插件
Permit.js 是一个 jQuery 插件,用于构建交互的,多态的网站原型和应用程序原型.也许你的网站有的功能仅适用于登录的成员,只有管理员才能使用或者你的应用程序会根据线上或离线有不同的功能,这 ...
- 移动端-js触摸事件
开发者工具 在移动开发中,一种较为容易的做法是,先在桌面上开始原型设计,然后再在打算要支持的设备上处理移动特有的部分.多点触摸正是难以在PC上进行测试的那些功能之一,因为大部分的PC都没有触摸输入. ...
- Oracle中用随机数更新字段----将一张表的数据插入另一张表----环境设置
DECLARE CURSOR recordCursor IS SELECT longitude,latitude FROM WR_WIUST_B_SEC FOR UPDATE; recordRow r ...
- 跨越千年的RSA算法
转载自http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...
- 访客至上的Web、移动可用性设计--指导原则
文章出自:听云博客 关于可用性设计,之前写过一个“纸上谈兵”版本的,那篇帖子主要是根据A/B test的方式来进行的. 但是最近找了本Steve krug写的Don't make me think,我 ...
- 打印frame
NSLog(@"%@",NSStringFromCGRect(switch.frame)); 或者 CFShow(NSStringFromCGRect(switch.frame)) ...