|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 DYC 于 2018-6-20 08:39 编辑
把各个链表中的数据分别存到记事本中,也可以从记事本中读取数据。
代码在附件中,求各位大神帮帮我。
本帖最后由 关键是感觉 于 2018-6-20 14:13 编辑
- #include "stdio.h"
- #include "stdlib.h"
- #include "malloc.h"
- typedef struct sTest{
- int Data; //这里为了演示简单,直接创建了int类型变量作为数据域,其实最好到方法是创建一个结构体数据域
- struct sTest * next;
- }sTest;
- typedef struct sHead{ //根据大佬讲解,这样比较方便管理链表,比书中讲解的直接在全局创建比较好
- sTest * p_head;
- //好处可以记录链表状态,比如最后结点位置,最大值,最小值,你能想到的任何东西
- //sTest * p_tail;
- //int max;
- //int min
- }sHead;
- sHead * inital(){
- sHead * t= (sHead * )malloc(sizeof(sHead));
- if(!t) exit(-1); //创建失败直接退出
- t->p_head=NULL; //初始化
- return t; //返回指针
- }
- void add(sHead * p,int n){
- sTest *swap=(sTest * )malloc(sizeof(sTest));//因为是头部插入,所以最后申请到空间永远在头部
- swap->Data=n;
- swap->next=p->p_head; //头部插入
- p->p_head=swap;
- }
- void save(sHead * p){
- sTest *t=p->p_head;
- FILE * pf = fopen("d.data","wb");
- if(pf){
- while(t){
- fwrite(&t->Data,sizeof(t->Data),1,pf);
- t= t->next;
- }
- fclose(pf);
- }
- }
- void read(sHead * p){
- FILE * pf = fopen("d.data","rb");
- if(pf){
- int Data;
- int h;
- while(h = fread(&Data,sizeof(Data),1,pf)){
- add(p,Data);
- }
- fclose(pf);
- }
- }
- /*
- 上面都是链表知识,
- 文件读取和保存,
- 文件操作,先来一个死记硬背的理解,
- r 打开一个已有的文本文件,允许读取文件。
- w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。
- a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
- r+ 打开一个文本文件,允许读写文件。
- w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
- a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。
- 如果处理的是二进制文件可以在模式后面添加b
- 文字那么多其实就三个字母:r w a
- r就是可以读文件,不存在就读取失败
- w写文件,不存在创建文件,存在文件,覆盖文件
- a如果在一个文件追加内容,w肯定不行,r是读,所以有了a模式,不存在创建,存在追加信息
- +其实就是rwa的加强版,让r可读可写,r+ w+ a+ 类型
- b其实以什么方法操作文件 二进制
- t其实以什么方法操作文件 文本模式
- 网上收集:b是二进制模式,是一种通用的文件读取模式,因为所有的文件在硬盘中都是以二进制形式存放的 *** 就是通用的
- 二进制 I/O 函数
- 下面两个函数用于二进制输入和输出: 二进制模式操作
- size_t fread(void *ptr, size_t size_of_elements,
- size_t number_of_elements, FILE *a_file);
- size_t fwrite(const void *ptr, size_t size_of_elements,
- size_t number_of_elements, FILE *a_file);
- */
- void print(sHead * p){
- sTest *t=p->p_head;
- while(t){
- printf("%d\t",t->Data);
- t= t->next;
- }
- }
- void _ferr(sHead * p){
- sTest *t=p->p_head;
- while(t){
- sTest *t_free = t;
- t =t->next;
- free(t_free);
- }
- }
- int main(int argc, char *argv[]){
- sHead * head;
- int i;
- head = inital();
-
- read(head);
- for(i=0;i<10;i++){
- add(head,i);
- }
- print(head);
- save(head);
- _ferr(head);
- free(head);
- //停下手上的测试帮楼主。。。
- return 0;
- }
复制代码
代码没有几行,就是注释比较多
|
|