C语言中链表任意位置怎么插入数据?然后写入文件中?
链表插入示意图:(图是个人所画)因为链表指针指来指去,难以理解,所以辅助画图更加方便。
插入某个学号后面图:

定义的结构体:
struct student
{
]; //学生学号
]; //学生姓名
struct student *next; //next 指针 指向 struct student 类型的变量
}stu;
插入到某个学号后面,但不能插入到第一个节点的前面!
/***************
函数功能:
插入学生
返回:指向链表表头的指针
/***************/
void insert_message(struct student* head)
{
FILE* fp; //定义文件指针
struct student* pointer,*q,*temp; // p指针指向新节点 q指向插入节点的地方
fp=fopen("student.txt","wb+");
pointer=head->next;//跳过头结点 指向下一个节点
InputBox(stu.ID,,"请输入要插入哪个学号后面");
while(pointer!=NULL)
{
) //假设要插入到1后面,输入1
{
fwrite(pointer,,fp); //先把1节点写入文件
q = (struct student *)malloc(sizeof(struct student)); //开辟新节点内存
InputBox(stu.ID,,"请输入学生学号");
strcpy(q->ID,stu.ID);
InputBox(stu.name,,"请输入学生姓名");
strcpy(q->name,stu.name);
temp= pointer->next; //将原来的 1后面的数据 2 赋值给临时temp结构体变量
pointer->next = q; //将q节点 赋值给 原来2的位置
pointer=pointer->next; //将q节点数据(pointer->next 等于q) 赋值给p 好让p节点写入文件
fwrite(pointer,,fp);//写入输入的q节点数据
pointer->next=temp; //将原来2位置的数据赋值到 p的下个节点(由于上个代码p=p->next)p被赋值p->next
pointer=pointer->next; //p总是指向新的节点
while(pointer!=NULL)
{fwrite(pointer,,fp); //将其他各节点遍历写入文件
pointer=pointer->next;
}
fclose(fp);
outtext("插入学生成功!");
}
fwrite(pointer,,fp); //事先开始遍历节点写入文件
pointer=pointer->next;
}
}
任意位置插入 图:

代码这么一改,任意位置的插入:
/***************
函数功能:
插入出勤学生
返回:指向链表表头的指针
/***************/
void insert_message(struct student* head)
{
FILE* fp; //定义文件指针
struct student* pointer,*q,*temp; // p指针指向新节点 q指向插入节点的地方
fp=fopen("student.txt","wb+");
pointer=head->next;//跳过头结点 指向下一个节点
InputBox(stu.ID,,"请输入要插入哪个学号位置?");
while(pointer!=NULL)
{
) //输入要插入到哪个位置?
{
q = (struct student *)malloc(sizeof(struct student)); //开辟新节点内存
InputBox(stu.ID,,"请输入学生学号");
strcpy(q->ID,stu.ID);
InputBox(stu.name,,"请输入学生姓名");
strcpy(q->name,stu.name);
temp=pointer; //将原来的 数据 赋值给临时temp结构体变量
pointer = q;//将q节点 赋值给 原来2的位置
fwrite(pointer,,fp);//写入输入的q节点数据
pointer->next=temp; //将原来2位置的数据赋值到 p的下个节点
pointer=pointer->next; //p总是指向新的节点
while(pointer!=NULL)
{fwrite(pointer,,fp); //将其他各节点遍历写入文件
pointer=pointer->next;
}
fclose(fp);
outtext("插入学生成功!");
}
fwrite(pointer,,fp); //事先开始遍历节点写入文件
pointer=pointer->next;
}
}
C语言中链表任意位置怎么插入数据?然后写入文件中?的更多相关文章
- 072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法
072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法 本文知识点:综合案例-数组移位-在指定位置处插入数据方法 ...
- 《Java虚拟机原理图解》1.5、 class文件中的方法表集合--method方法在class文件中是怎样组织的
0. 前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描 ...
- 《Java虚拟机原理图解》1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的
0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述 ...
- C# 将List中的数据导入csv文件中
//http://www.cnblogs.com/mingmingruyuedlut/archive/2013/01/20/2849906.html C# 将List中的数据导入csv文件中 将数 ...
- extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”
extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”
- 在C的头文件中定义的结构体,如何在cpp文件中引用
解决方案1:在cpp文件中放置.c,且在该文件中引用变量 解决方案2:在一个cpp文件中包含.c,但在另一个cpp文件中使用结构体变量 cpp文件1 cpp文件2 #include "dia ...
- MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中
MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用MATLAB实现:指定路径下 ...
- python将一个字符串写入文件中的编码问题
python2将一个字符串写入文件中: 1.如果字符串是str类型 # -*- coding:utf-8 -*- txtFile="今天天气不错" name = "1.t ...
- python编码的原理以及写入文件中乱码的原因
1.unicode可以理解为世界上所有字符的集合,它不对应二进制编码 2.详见: https://blog.csdn.net/qq_33692803/article/details/81321340 ...
随机推荐
- MAC下配置WebDav
WebDav完全可以当成一个网络共享的文件服务器使用! # 1. 修改了两个配置文件 # 2. 创建web访问用户的用户名和口令 # 3. 创建了两个目录,并且设置了管理权限 # 切换目录 $ cd ...
- centos6配置vnc登录远程物理机及vb复制vdi启动虚拟机网络问题
1.安装vnc和vncserver #yum install tigervnc tigervnc-server 2.启动VNC服务# vncserverYou will require a passw ...
- GJM : 用JIRA管理你的项目(一)JIRA环境搭建 [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- 【笔记】InnoDB内存分配
原文:http://www.mysqlperformanceblog.com/2006/05/30/innodb-memory-usage/ 有很多问题是有关InnoDB如何分配内存的.这里我试图解释 ...
- jQuery Layer mobile 弹出层
layer mobile是为移动设备(手机.平板等webkit内核浏览器/webview)量身定做的弹层支撑,采用Native JavaScript编写,完全独立于PC版的layer,您需要按照场景选 ...
- [deviceone开发]-一个很炫的手势动画示例
一.简介 这是iOS下的效果,android下完全一致.通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过手 ...
- 【服务器】CentOS下部署运行NodeJs Web App
NodeJs Web App测试完成后,要怎么部署呢?介绍两个不错的方案 已知以下情景: 我要为 「kenniu」这个项目做配置 它的入口文件在 「/path/to/entry.js」 运行的User ...
- 每日一博 | 用 Ionic2 创建 App 启动页滑动欢迎界面
原文 https://my.oschina.net/qinphil/blog/777787 效果如下,图片来自网络 本文例子和上图稍有不同,主要功能如下: 每滑动一下展示一张全屏图片: 滑动到最后一 ...
- 【Openlayers3】在地图上添加highcharts图表
今天试用了一下ol3,效果很是不错! ol3中有个ol.Overlay,使用这个类我们可以在地图中添加各种html要素. 下面我们在地图中添加一个饼图 html中添加一个div容器: <div ...
- 小谈KVC中KeyPath的集合运算符
由于知识点比较简单,这里不再陈述一大堆的原理,直入主题. KVC中的集合运算符有以下三类: 1.简单集合运算符:@avg.@sum.@max.@min.@count (只能用在集合对象中,对象属性必须 ...