链表插入示意图:(图是个人所画)因为链表指针指来指去,难以理解,所以辅助画图更加方便。

插入某个学号后面图:

定义的结构体:

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语言中链表任意位置怎么插入数据?然后写入文件中?的更多相关文章

  1. 072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法

    072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法 本文知识点:综合案例-数组移位-在指定位置处插入数据方法 ...

  2. 《Java虚拟机原理图解》1.5、 class文件中的方法表集合--method方法在class文件中是怎样组织的

    0. 前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描 ...

  3. 《Java虚拟机原理图解》1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的

    0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述 ...

  4. C# 将List中的数据导入csv文件中

    //http://www.cnblogs.com/mingmingruyuedlut/archive/2013/01/20/2849906.html C# 将List中的数据导入csv文件中   将数 ...

  5. extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”

    extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”

  6. 在C的头文件中定义的结构体,如何在cpp文件中引用

    解决方案1:在cpp文件中放置.c,且在该文件中引用变量 解决方案2:在一个cpp文件中包含.c,但在另一个cpp文件中使用结构体变量 cpp文件1 cpp文件2 #include "dia ...

  7. MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中

    MATLAB实例:新建文件夹,保存.mat文件并保存数据到.txt文件中 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用MATLAB实现:指定路径下 ...

  8. python将一个字符串写入文件中的编码问题

    python2将一个字符串写入文件中: 1.如果字符串是str类型 # -*- coding:utf-8 -*- txtFile="今天天气不错" name = "1.t ...

  9. python编码的原理以及写入文件中乱码的原因

    1.unicode可以理解为世界上所有字符的集合,它不对应二进制编码 2.详见: https://blog.csdn.net/qq_33692803/article/details/81321340 ...

随机推荐

  1. jQuery Transit 过渡效果

    jQuery Transit 使用 CSS3 的新特性来实现过渡效果,比默认的.animate方法要顺畅得多. 因为使用 CSS3 进行过渡效果,所以对不支持 CSS3 的浏览器效果有所下降. 语法和 ...

  2. [js开源组件开发]query组件,获取url参数和form表单json格式

    query组件,获取url参数和form表单json格式 距离上次的组件[js开源组件开发]ajax分页组件一转眼过去了近二十天,或许我一周一组件的承诺有了质疑声,但其实我一直在做,只是没人看到……, ...

  3. Hybrid框架UI重构之路:一、师其长技以自强

    这两年在支撑公司的Hybrid框架的运维发展,让人确认这种移动开发方式确实是一条不错的路.混合应用这种开发方式降低开发难度,极大的提高开发效率,最重要的一点效果可以接近原生应用.框架的本身是需要持续不 ...

  4. Java Web 三层架构详解

    java 三层架构ssh 一个spring2.5+hibernate3.2+struts2.0组合框架,使用spring的 IoC来管理应用的 所有bean,包括struts2的 action,充分发 ...

  5. 总结CSS3新特性(Transform篇)

    概述: CSS3新添加的Transform可以改变元素在可视化区域的坐标(这种改变不会引起文档的重排,只有重排),以及形状,还有些3D形变.结合 Animation(这里以后会有个链接的) 能实现酷炫 ...

  6. ABAP--关于ABAP流程处理的一些命令的说明(stop,exit,return,check,reject)

    Stop 命令 使用该命令的程序位置 INITIALIZATION, AT SELECTION-SCREEN, START-OF-SELECTION和GET 事件中 处理说明 1. 当在INITIAL ...

  7. MSCRM 2013/2015 Ribbon Editor

    由于新版本2015的解决方案与之前有变化,因此许多老的Tools已经不能使用,推荐给大家新的Ribbon Editor Tool. 下载地址: http://www.develop1.net/publ ...

  8. SharePoint 2013 搜索报错"Unable to retrieve topology component health. This may be because the admin component is not up and running"

    环境描述 Windows 2012 R2,SharePoint 2013(没有sp1补丁),sql server 2012 错误描述 搜索服务正常,但是爬网一直在Crawling Full,但是爬不到 ...

  9. 图文详细解说DevExpress 2015新版亮点【附文档下载】

    历时两个月,翻译自官网的更新说明文档,最后整理成册,文末附PDF地址. DevExpress 在今年6月份发布了正式的2015版本,2015在旧版基础上有明显的升级改进,尤其是DevExtreme.W ...

  10. LayoutInflater的infalte()

    其中: resource:是布局文件ID root:是父ViewGroup对象, attachToRoot:是是否将“翻译”出来的View添加到上面的root中 root和attachToRoot是共 ...