博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中链表任意位置怎么插入数据?然后写入文件中?
阅读量:6080 次
发布时间:2019-06-20

本文共 3362 字,大约阅读时间需要 11 分钟。

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

 

插入某个学号后面图:

 

 

 

定义的结构体:

struct student{  char ID[11]; //学生学号char name[20];  //学生姓名 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,11,"请输入要插入哪个学号后面");              while(pointer!=NULL)       {            if(strcmp(pointer->ID,stu.ID)==0) //假设要插入到1后面,输入1           {                 fwrite(pointer,sizeof(struct student),1,fp); //先把1节点写入文件                                     q = (struct student *)malloc(sizeof(struct student)); //开辟新节点内存                              InputBox(stu.ID,11,"请输入学生学号");                    strcpy(q->ID,stu.ID);                              InputBox(stu.name,20,"请输入学生姓名");               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,sizeof(struct student),1,fp);//写入输入的q节点数据                            pointer->next=temp; //将原来2位置的数据赋值到 p的下个节点(由于上个代码p=p->next)p被赋值p->next               pointer=pointer->next; //p总是指向新的节点                              while(pointer!=NULL)               {fwrite(pointer,sizeof(struct student),1,fp);  //将其他各节点遍历写入文件               pointer=pointer->next;               }               fclose(fp);               outtext("插入学生成功!");                          }           fwrite(pointer,sizeof(struct student),1,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,11,"请输入要插入哪个学号位置?");              while(pointer!=NULL)       {            if(strcmp(pointer->ID,stu.ID)==0) //输入要插入到哪个位置?           {                                       q = (struct student *)malloc(sizeof(struct student)); //开辟新节点内存                              InputBox(stu.ID,11,"请输入学生学号");                    strcpy(q->ID,stu.ID);                              InputBox(stu.name,20,"请输入学生姓名");               strcpy(q->name,stu.name);               temp=pointer; //将原来的  数据  赋值给临时temp结构体变量                           pointer = q;//将q节点 赋值给 原来2的位置               fwrite(pointer,sizeof(struct student),1,fp);//写入输入的q节点数据                            pointer->next=temp; //将原来2位置的数据赋值到 p的下个节点               pointer=pointer->next; //p总是指向新的节点                              while(pointer!=NULL)               {fwrite(pointer,sizeof(struct student),1,fp);  //将其他各节点遍历写入文件               pointer=pointer->next;               }               fclose(fp);               outtext("插入学生成功!");                         }           fwrite(pointer,sizeof(struct student),1,fp);  //事先开始遍历节点写入文件            pointer=pointer->next;}   }

 

转载地址:http://wxegx.baihongyu.com/

你可能感兴趣的文章
设置为disabled不可用的表单元素的value值无法发送
查看>>
CentOS 6.5 ipesc下Openswan实现双IDC互联
查看>>
小谈React、React Native、React Web
查看>>
[原创]Camtasia Studio 6.0录制视频时鼠标闪烁的解决办法
查看>>
Android Activity 四种启动模式
查看>>
SQL Server 2014新特性——Buffer Pool扩展
查看>>
需求的陷阱
查看>>
系统架构简单图解
查看>>
浅谈加密技术
查看>>
centOS7下安装GUI图形界面
查看>>
一张图透析阿里云API应用创新大赛
查看>>
sql重复行求和
查看>>
Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs
查看>>
transient的理解
查看>>
python中if __name__ == '__main__': 介绍
查看>>
HackRF实现无线门铃信号分析重放
查看>>
Windows源码安装PyTorch 0.4
查看>>
AI开发者福音!阿里云推出国内首个基于英伟达NGC的GPU优化容器
查看>>
CentOS6安装和配置rsync
查看>>
在真机里安装 ubuntu 14.04和一些常用的软件(二)
查看>>