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

插入某个学号后面图:

定义的结构体:

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. Python读写excel

    #-*- coding:utf-8 -*- #__author__ = 'liu-ke' import xlrd from xlutils.copy import copy mybook = xlrd ...

  2. 高性能 Windows Socket 组件 HP-Socket v2.3.1-beta-2 发布

    HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP ...

  3. Node.JS文件系统解析

    1.Node.js 文件系统 var fs = require("fs") 2.异步和同步 读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFile ...

  4. asp.net mvc4 使用 System.Web.Optimization 对javascript和style的引入、代码合并和压缩的优化(ScriptBundle,StyleBundle,Bundling and Minification )

    Bundling and Minification两个单词对今天的内容有个比较好的总结. 问题所在 一. 在asp.net包括mvc项目中,引入js和css也许有人认为是个很容易和很简单操作的事情,v ...

  5. [AngularJS] 使用AngularAMD动态加载Controller

    [AngularJS] 使用AngularAMD动态加载Controller 前言 使用AngularJS来开发Single Page Application(SPA)的时候,可以选用AngularU ...

  6. paramiko 遭遇socket.error: Socket is closed 错误的解决办法

    似乎是connection自己断了解决的办法是在创建conn的时候添加下面这句 conn.keep_this = conn_session 完整代码 def create_a_conn(ip_addr ...

  7. ContentTools – 所见即所得(WYSIWYG)编辑器

    Content Tools是一个用于构建所见即所得编辑器(WYSIWYG)的 JavaScript 库.ContentTools 所见即所得的编辑器只需要几个简单的步骤就可以加入到任何的 HTML 页 ...

  8. 【web前端面试题整理04】阿里一行之大神面对面

    前言 这段时间我在河南一家公司当了一段时间的前端主管,最后可耻的匿了,原因各种各样,最主要的就是不想呆在郑州了. 其实这里的同事还是很不错的,面对老总最后的挽留我不是没有动心,而是这个地方确实不太好, ...

  9. JavaScript中对象的比较

    Javascript中有'=='和'==='两种相等比较,后者是全等,会判断数据类型,前者是相等,在比较时,会发生隐式转换. 如果将两个对象做'=='比较,结果会如何呢? 比如有如下两个对象: var ...

  10. 如何将List<string>转化为string

    Convert List, string. A List can be converted to a string. This is possible with the ToArray method ...