精华内容
下载资源
问答
  • 请问C语言如何把链表存入文件,从文件读取链表Consumer*read_list(){FILE*fp;if((fp=fopen("CONSUMER.dat","rb"))==NULL){printf("无法读取CONSUMER.dat\n");returnNULL;}intsign;Consumer*s,*p,*head;head=...

    请问C语言如何把链表存入文件,从文件读取到链表

    Consumer* read_list()

    {

    FILE *fp;

    if ((fp = fopen("CONSUMER.dat", "rb")) == NULL)

    {

    printf("无法读取 CONSUMER.dat\n");

    return NULL;

    }

    int sign;

    Consumer *s,*p,*head;

    head= (Consumer*)malloc(SIZE_C);

    if (head == NULL)

    {

    printf("读取失败!内存空间申请不足!\n");

    return NULL;

    }

    fseek(fp, 0, SEEK_END);

    if (ftell(fp) == 0)

    {

    return NULL;

    }

    p = head;

    p->next = NULL;

    while (feof(fp))

    {

    s = (Consumer*)malloc(SIZE_C);

    fread(s, SIZE_C, 1, fp);

    p->next = s;

    p = s;

    p->next = NULL;

    }

    fclose(fp);

    return head;

    }//读取文件到链表

    int save_consumer(Consumer *p)

    {

    FILE *fp;

    Consumer *head;

    head = p;//p为已经构建好的链表

    if ((fp = fopen("CONSUMER.dat", "ab+")) == NULL)

    {

    printf("无法打开 CONSUMER.dat!\n");

    return -1;

    }

    while (p != NULL)

    {

    fwrite(p, SIZE_C, 1, fp);

    p = p->next;

    }

    fclose(fp);

    return 1;

    }//储存链表到文件

    ------解决思路----------------------

    for reference only,我就只写文件到链表了,链表o大n文件用对应的fprintf就可以了

    /*************************************************************************

    > File Name: test3.c

    > Author: jukay

    > Mail: hellojukay@163.com

    > Created Time: 2014年12月18日 星期四 19时29分18秒

    ************************************************************************/

    #include

    #include

    struct date

    {

    char str[3];

    struct date *next;

    };

    //链表长度为len

    struct date *create_link(int len)

    {

    struct date *head;

    struct date *tmp;

    int i;

    head = malloc(sizeof(struct date));

    tmp = head;

    for(i = 1; i 

    {

    head ->next = malloc(sizeof(struct date));

    head = head ->next;

    }

    head ->next = NULL;

    return tmp;

    }

    //读文件到链表

    void read_file_to_link(struct date *head,FILE *fp)

    {

    if(head == NULL

    ------解决思路----------------------

    fp == NULL)

    {

    fprintf(stderr,"null pointer");

    exit(EXIT_FAILURE);

    }

    do

    {

    fscanf(fp,"%3s",head ->str);

    head = head ->next;

    }while(head != NULL);

    }

    //显示链表中的内容

    void print_link(struct date *head)

    {

    if(head == NULL)

    {

    fprintf(stderr,"null pointer");

    exit(EXIT_FAILURE);

    }

    do

    {

    printf("%s",head ->str);

    head = head ->next;

    }while(head != NULL);

    }

    int main()

    {

    FILE *fp;

    int len; //链表长度

    scanf("%d",&len);

    fp = fopen("a.txt","r");

    struct date *head;

    head = create_link(len);

    read_file_to_link(head,fp);

    print_link(head);

    exit(EXIT_SUCCESS);

    }

    ------解决思路----------------------

    Consumer* read_list()

    {

    FILE *fp;

    if ((fp = fopen("CONSUMER.dat", "rb")) == NULL)

    {

    printf("无法读取 CONSUMER.dat\n");

    return NULL;

    }

    int sign;

    Consumer *s,*p,*head;

    head= (Consumer*)malloc(SIZE_C);

    if (head == NULL)

    {

    printf("读取失败!内存空间申请不足!\n");

    return NULL;

    }

    fseek(fp, 0, SEEK_END);

    if (ftell(fp) == 0)

    {

    return NULL;

    }

    p = head;

    p->next = NULL;

    while (feof(fp))

    {

    s = (Consumer*)malloc(SIZE_C);

    //fread(s, SIZE_C, 1, fp);

    fread(s, sizeof(char), SIZE_C, fp);

    p->next = s;

    p = s;

    p->next = NULL;

    }

    fclose(fp);

    return head;

    }//读取文件到链表

    int save_consumer(Consumer *p)

    {

    FILE *fp;

    Consumer *head;

    head = p;//p为已经构建好的链表

    //if ((fp = fopen("CONSUMER.dat", "ab+")) == NULL)

    if ((fp = fopen("CONSUMER.dat", "wb")) == NULL)

    {

    printf("无法打开 CONSUMER.dat!\n");

    return -1;

    }

    while (p != NULL)

    {

    //fwrite(p, SIZE_C, 1, fp);

    fwrite(p, sizeof(char), SIZE_C, fp);

    p = p->next;

    }

    fclose(fp);

    return 1;

    }//储存链表到文件

    展开全文
  • c语言数据从链表写入到文件和从文件读取链表

    千次阅读 多人点赞 2020-03-07 14:03:28
    想要实现c语言数据从链表写入到文件和从文件读取链表这个功能必须 先得了解一些关于文件操作的一些函数 fopen() fclose() fprintf() fscanf() fread() fwrite() 这些都会再我的另外一篇博客中提到 这个代码仅仅是...

    简单的一个代码

    • 想要实现c语言数据从链表写入到文件和从文件读取到链表这个功能必须
    • 先得了解一些关于文件操作的一些函数
    • fopen() fclose() fprintf() fscanf() fread() fwrite()
      这些都会再我的另外一篇博客中提到
    • 这个代码仅仅是一个示例,重要为了实现上面的功能
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    typedef struct W {
       int data;
       struct W* next;
    }W;
    
    W* add(W*h) {//创建一个链表,并返回头节点
       h = (W*)malloc(sizeof(W));
       W* p, * q;
       p = h;
       for (int i = 0;i < 2;i++) {
           q = (W*)malloc(sizeof(W));
           printf("加数\n");
           q->data = i;
           
           p->next = q;//尾插法核心三步
           q->next = NULL;
           p = q;
       }
       printf("结束\n");   
        return h;
    }
    void save(W* h) {//创建并将链表信息存入文件
       FILE* fp;
       W* p = h->next;
       if ((fp = fopen("D://www.txt", "w+")) == NULL) {
           printf("打开失败");
           exit(-1);
       }
       else
       {
       	printf("打开save成功\n"); 
       }
       for (int i = 0;i < 2;i++) {
           fprintf(fp, "%d\n", p->data);
           p = p->next;
       }
       printf("成功\n");
       fclose(fp);
      
    }
    void load() {//打开并读取文件内容并显示
       FILE* fp;
       int n=2;
       if (fp == fopen("D://www.txt", "r") == NULL) {
           printf("打开失败");
           exit(-1);
       }
       else{
       	printf("load成功\n");
       }
       W* h1, * p1, * q1;
       h1 = (W*)malloc(sizeof(W));
       p1 = h1;
       while(n) {
           q1 = (W*)malloc(sizeof(W));
           fscanf(fp, "%d\n", &q1->data);
           printf("%d", q1->data);
           
           p1->next = q1;//尾插
           q1->next = NULL;
           p1 = q1;
           n--;
       }
       printf("load结束");
       fclose(fp); 
    
    }
    int main() {
       
       W* h;
       
          h= add(h);
           save(h);
           load();
             
       return 0;
    }
    

    dev运行结果
    代码运行图
    成功创建并存入文件
    在这里插入图片描述

    展开全文
  • 为什么输入数据后再读取链表,链表最后一个节点的数据总是会重复输出两次代码:#include#include#define LEN sizeof(struct student)struct student{char name[20];long num;float chinese;float math;float english;...

    为什么输入数据后再读取链表,链表最后一个节点的数据总是会重复输出两次代码:#include#include#define LEN sizeof(struct student)struct student{char name[20];long num;float chinese;float math;float english;struct student *next;};struct student *head;

    main(){struct student *p,*q;p=(struct student*)malloc(LEN); head=p;head->next=NULL;q=(struct student*)malloc(LEN);FILE *f1;if((f1=fopen("无.dat","wb"))==NULL){printf("文件打开失败\n");exit(1);}printf("\n\t1:新建学生成绩表\n");printf("请在下面依次输入姓名学号语文数学英语\n");scanf("%s%ld%f%f%f",&q->name,&q->num,&q->chinese,&q->math,&q->english);while(q->name!=0&&q->num!=0&&q->chinese!=0&&q->math!=0&&q->english!=0){p->next=q;p=q;q=(struct student*)malloc(LEN);printf("请在下面依次输入学号姓名语文数学英语\n");scanf("%s%ld%f%f%f",&q->name,&q->num,&q->chinese,&q->math,&q->english);fwrite(p,sizeof(struct student),1,f1)!=1;}p->next=NULL;

    if(fclose(f1)){printf("文件异常关闭");exit(1);}

    if((f1=fopen("无.dat","rb"))==NULL){printf("文件打开失败\n");exit(1);}

    p=head->next;while(!feof(f1)){fread(p,sizeof(struct student),1,f1);printf("%s %ld %f %f %f\n",p->name,p->num,p->chinese,p->math,p->english);}if(fclose(f1)){printf("文件异常关闭");exit(1);}}

    展开全文
  • [C语言课程设计链表操作课 程 设 计课程名称____C语言课程设计____题目名称 链表操作学生学院专业班级学 号学生姓名指导教师2012 年 10 月 24 日目录课程设计简介1.1 要求1.2 意义和目的1.3 内容1.4 课程设计时间...

    [C语言课程设计链表操作

    课 程 设 计

    课程名称____C语言课程设计____

    题目名称 链表操作

    学生学院

    专业班级

    学 号

    学生姓名

    指导教师

    2012 年 10 月 24 日

    目录

    课程设计简介

    1.1 要求

    1.2 意义和目的

    1.3 内容

    1.4 课程设计时间

    具体实现

    2.1 程序总体方案

    2.1.1程序设计思想

    2.1.2程序结构或流程图

    2.2 改进方案

    2.2.1改进一

    2.2.1.1 改进方案

    2.2.1.2 具体实现

    2.2.1.3 实现效果

    2.2.2改进二

    2.2.2.1 改进方案

    2.2.2.2 具体实现

    2.2.2.3 实现效果

    2.2.3 改进三

    2.2.3.1 改进方案

    2.2.3.2 具体实现

    2.2.3.3 实现效果

    总体小结

    在整个设计过程中的心得体会

    4、参考文献

    1、课程设计简介

    1.1 要求

    参加本课程设计的学生,应当认真完成本课程设计的全部过程。并以最终课程设计成果来证明其独立完成各种实际任务的能力。从而,反映出理解和运用本课程知识的水平和能力。

    1.2 意义和目的

    意义:C语言是电子科学与技术专业的重要专业基础课。在很多后续课程中,都要使用到C语言。

    学生通过对C语言的学习,已经具备了使用C语言编写简单的应用程序的能力。为了加强程序设计基础,开设课程设计课,使学生对C语言有更全面的理解,进一步提高运用C语言编程解决实际问题的能力,同时,为后续课程的学习夯实基础。

    目的:

    1)提高用程序设计解决实际问题的能力。

    2)通过提出算法、指定输入输出来设计一个解决方案。

    3)用C语言合理地开发两个简洁有效的程序代码来实现该设计。

    4)测试程序是否工作且满足设计指标并评价其效率。

    1.3 内容

    链表操作题(包括建立、插入、删除、打印等)(参考教材);

    1.4 课程设计时间

    下达时间9月26日;完成时间10月12日。

    2、具体实现

    2.1 程序总体方案

    2.1.1程序设计思想

    通过在主函数循环调用各个函数,从而实现对链表的连续操作,最终实现链表的新建、打印、查找、保存、读取、更新、删除等等操作,进而管理学生信息,并保存学生的各种信息,方便下一次操作。链表是以学生学号排序,当出现学号相同时会有提示,并结束本次操作,成功实现一个学号对应一位学生。

    2.1.2程序结构或流程图

    主函数

    1.新建 2.打印 3.查找 4.保存 5.读取 6.更新 7.增加 8.删除 9.删除全部

    2.2 改进方案

    2.2.1改进一

    2.2.1.1 改进方案

    刚开始链表是按插入顺序进行排列的,打印的时候也没有按序号打印,总体看起来很乱。所以,在新建、插入等需要增加新的学生信息的时候,调用按学号排序的函数,这样打印的时候就显得很工整,有条理。

    2.2.1.2 具体实现

    struct Student *sort(struct Student *pHead,struct Student *temp)

    {

    struct Student *p0,*p1,*p2;

    p1=pHead;

    p0=temp;

    if(pHead==NULL)

    {

    pHead=p0;p0->pS=NULL;

    }

    else

    {

    while((p0->id>p1->id)&&(p1->pS!=NULL))

    {

    p2=p1;

    p1=p1->pS;

    }

    if(p0->idid)

    {

    if(pHead==p1) pHead=p0;

    else p2->pS=p0;

    p0->pS=p1;

    }

    else if(p0->id==p1->id) //发现学号相同

    {

    printf("学号为“%d”的成绩信息已输入,请从新输入!\n",p0->id);

    m_num=0;

    }

    else

    {

    p1->pS=p0;

    p0->pS=NULL;

    }

    }

    return pHead;

    }

    2.2.1.3 实现效果

    2.2.2改进二

    2.2.2.1 改进方案

    一开始没有建立数据的时

    展开全文
  • 双向链表其实是单链表的改进。当我们对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时,又必须从表头开始查找。这是由单链表结点的结构所限制的。因为单链表每个结点只有一个存储直接后继结点地址的链域...
  • C语言文件读取并写入链表

    万次阅读 多人点赞 2018-09-24 17:11:06
    C语言没啥要逼逼的,直接上代码,用心体会 #include "stdio.h" #include "stdlib.h" /***************************** 链表节点结构体 ****************************/ typedef struct link_node { int ID; ...
  • }//读取文件链表 int save_consumer(Consumer *p) { FILE *fp; Consumer *head; head = p;//p为已经构建好的链表 if ((fp = fopen("CONSUMER.dat", "ab+")) == NULL) { printf("无法打开 CONSUMER....
  • } 以下是从文件读取刚才放入的 数据 放到链表中 #include "stdafx.h" #include "stdio.h" #include "stdlib.h" #define LEN sizeof(struct Student) struct StudentDate { long xuehao; char xingming[20]; char ...
  • 当前位置:我的异常网» C语言»链表透过文件读写计算两个多项式之积链表透过文件读写计算两个多项式之积www.myexceptions.net网友分享于:2014-03-24浏览:10次链表通过文件读写计算两个多项式之积写了这个程序,...
  • 功能:添加,删除,查找,全部输出。 添加时自动保存到文件, 查找、全部输出时从文件读取; 复制粘贴即可运行!绝对好用
  • 这个小代码是我凭自己对指针和链表的理解和认识,自己实现的,没有参考其他人的代码,如果有相同的地方,那真的只是巧合,代码我在ubuntu 15.04下测试通过,可能存在很多错误和漏洞.doublelist.c/*****************...
  • #include#includetypedefstructstudent{intid;charname[32];structstudent*next;...ST*create(ST*h)//头插创建链表;{ST*head=h;ST*p=(ST*)malloc(sizeof(ST));printf("请输入学号、姓名\n");scanf("%d%s",&p-...
  • C语言读取磁盘文件位置链表的方法.通过这个可以了解C语言的磁盘定位方法
  • 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针...
  • C语言建单向链表

    2020-05-23 08:34:38
    Let life be beautiful like summer flowers and death like autumn leaves。生如夏花之灿烂,死如秋叶之静美。...链表和二叉树是C语言数据结构的基础和核心。 链表有多种形式,它可以是单链接的或者双链接的,可以是已
  • 文件存储到链表里,然后关闭文件,再以只写格式打开,文件就是空的了,然后遍历链表,遇到删除目标跳过,其他写入,插入时在写入本结点内容同时再定义一个新的结构体指针并申请内存,输入,读取。 不用重建文件 ....
  • 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有...
  • C语言实现静态链表介绍 静态链表其实是为了给没有指针的编程语言设计的一种实现单链表功能的方法。 3.1静态链表的优缺点 优点: 在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了在顺序储存结构中...
  • C语言文件读写

    2013-04-16 22:41:55
    C语言实现度文件读取,有源代码。 一个简单的实例。 文件读写
  • C语言指针、链表文件操作详解

    千次阅读 2017-05-02 22:48:27
    用两个函数 Load_LinkList() 和 Save_LinkList() 让链表文件操作结合,除了打印函数,其他都是在内存中操作链表,这样写更有条理,在创建链表时没有采用书上的用一个中间变量引导,并插入到结点前面,而是直接在链...
  • 在写一个通讯录管理系统,然后要把联系人的信息结构体放到链表中,然后将链表里的信息写入文件中,下次打开时还能从该文件读出数据。 链表头指针TEL,结构体中有name,tel,style,mail 四项,存入“telephone.txt"中。...
  • C语言基础之链表

    2017-06-16 01:04:05
    链表 链表(Linked list)是一种常见的基础数据结构,它不像数组必须顺序存储,链表中的元素在内存中可以连续也可以不连续。因此,为了表明元素之间的次序关系,除了存储元素本身之外,还要存储元素之间的关系。 ...
  • C语言文件读写操作,从文件读取数据
  • c语言实现循环链表

    2020-10-27 22:52:11
    循环链表的创建其实并不复杂,只需要在创建单链表时定义一个节点(本文章中为s)参与循环找到尾节点然后让其指向头节点的下一个(因为第一个节点时没有值的),在之后的遍历中则需要使用do while循环因为跳跃了第一...
  • c语言链表数据存入文件读取文件

    万次阅读 多人点赞 2017-05-07 15:49:24
    c语言链表数据存入文件读取文件
  • C语言实现单向链表

    2015-09-17 17:10:43
    初学C语言,对于没有可变长度的数组类型,很是不方便。在了解了“链表”这种数据类型后,自己实现了一个类似的可变数组的功能...
  • C语言之单向链表

    万次阅读 2019-07-01 08:52:24
    单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有...
  • 基于C语言的双链表

    2021-09-13 15:43:52
    } 遍历 由于链表无法实现随机存取,只能顺序读取 PList Visit1(PList L)//后项遍历 { while (L) { L = L->next; } } PList Visit2(PList L)//前项遍历 { while (L) { L = L->prior; } } PList Visit3...
  • 程序启动后,首先打开固定的已加密文件信息保存文件读取文件信息存在到链表中。然后等待用户输入命令。 如果用户输入1:程序请求输入待加密文件文件名,如果用户输入错误的文件名,程序显示提示信息后返回主界面,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,639
精华内容 11,055
关键字:

c语言文件读取链表

c语言 订阅