返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现链表与文件存取的示例代码
  • 696
分享到

C语言实现链表与文件存取的示例代码

2024-04-02 19:04:59 696人浏览 泡泡鱼
摘要

目录此处为main函数的内容一、输入数据到链表中二、把链表数据存入文件三、输出文件完整代码本程序主要功能是建立链表,然后把链表数据存储到文件中,然后把文件数据存储到数组中并输出。 不

本程序主要功能是建立链表,然后把链表数据存储到文件中,然后把文件数据存储到数组中并输出。

不多说了,放代码。

此处为main函数的内容

int main(void)
{
    char filename[50];
    printf("How many ?: ");
    scanf("%d", &n);		
    printf("please input filename: ");
    scanf("%s", filename);	
    Create();       //调用函数建立链表
    save(filename); //调用函数存到文件
    free(phead);//释放phead内存
    show(filename); //调用函数输出文件
    system("pause");
    return 0;
}

一、输入数据到链表中

建立链表并输入数据到链表里

代码如下:

typedef struct stu
{
    char name[20];
    char adr[20];
    int tel;
    struct stu* pnext;
} stu;
int n;	//n存着信息条数
stu* phead=NULL;//phead为链表首地址
 
void Create()          //建立链表
{
    stu *pend,*pnew;//尾节点,新节点
    pend=phead =(stu*)malloc(sizeof(stu));//分配内存给首节点
    printf("please first input Name, Adress and telephone:\n");
    for(int i=0;i<n;i++)
    {
        pnew=(stu*)malloc(sizeof(stu));  //分配新节点
        pend->pnext=pnew;   //原来的尾节点指向新节点
        pnew->pnext=NULL;  	//新节点的指针为NULL
        printf("NO.%d: ",i+1);
        scanf("%s", pend->name);
        scanf("%s", pend->adr);
        scanf("%d",&pend->tel);
        pend=pnew;  //赋值后指向尾节点
    }
    pnew=pnew->pnext;//指向NULL
    free(pnew);      //释放pnew内存
}

二、把链表数据存入文件

此处用到了fopen、fprintf、fclose等文件操作函数

代码如下:

void save(char *filename)
{
    FILE *w;//文件指针
    if ((w = fopen(filename, "wb")) == NULL){   
        printf("cannot open file\n");
        exit(1);
    }
    for (int i = 0; i < n; i++)  //链表数据循环输入到文件内
    {
         fprintf(w,"%s ",phead->name);
         fprintf(w,"%s ",phead->adr);
         fprintf(w,"%d", phead->tel);
         fprintf(w,"%s","\r\n");//换行
         phead=phead->pnext;//指向下一个节点
    }
    fclose(w);	//关闭文件
}

三、输出文件

先把文件内容保存到结构体数组内,然后再通过数组输出到屏幕上。

代码如下:

void show(char *filename)		//输出文件
{
    FILE *fp;//文件指针
    stu info[100];  //负责存放文件中的数据,然后输出
    if ((fp = fopen(filename, "rb")) == NULL){   
        printf("cannot open file\n");
        exit(1);
    }
    for (int i = 0; i < n; i++)
    {
        fscanf(fp,"%s",&(info[i].name));//输出数据到数组
        fscanf(fp,"%s",&(info[i].adr));
        fscanf(fp,"%d",&(info[i].tel));
        printf("%10s%15s%15d\n", info[i].name,
        	info[i].adr, info[i].tel); //输出数据到屏幕
    }
    fclose(fp); //关闭文件
}        

完整代码


#include<stdio.h>
#include<stdlib.h>
#include<process.h>
typedef struct stu
{
    char name[20];
    char adr[20];
    int tel;
    struct stu* pnext;
} stu;
int n;	//n存着信息条数
stu* phead=NULL;//phead为链表首地址
 
void Create()
{
    stu *pend,*pnew;//尾节点,新节点
    pend=phead =(stu*)malloc(sizeof(stu));//分配内存给首节点
    printf("please first input Name, Adress and telephone:\n");
    for (int i = 0; i < n; i++)
    {
        pnew=(stu*)malloc(sizeof(stu));  //分配新节点
        pend->pnext=pnew;   //原来的尾节点指向新节点
        pnew->pnext=NULL;   //新节点的指针为NULL
        printf("NO.%d: ",i+1);
        scanf("%s", pend->name);//输入数据存到链表中
        scanf("%s", pend->adr);
        scanf("%d",&pend->tel);
        pend=pnew;  //赋值后指向尾节点
    }
    pnew=pnew->pnext;//指向NULL
    free(pnew);      //释放pnew内存
}
void save(char *filename)
{
    FILE *w;//文件指针
    if ((w = fopen(filename, "wb")) == NULL){   
        printf("cannot open file\n");
        exit(1);
    }
    for (int i = 0; i < n; i++)  //链表数据循环输入到文件里
    {
         fprintf(w,"%s ",phead->name);//数据存入到文件
         fprintf(w,"%s ",phead->adr);
         fprintf(w,"%d", phead->tel);
         fprintf(w,"%s","\r\n");//换行
         phead=phead->pnext;//指向下一个节点
    }
    fclose(w);	//关闭文件
}
void show(char *filename)
{
    FILE *fp;//文件指针
    stu info[100];  //负责存放文件中的数据,然后输出
    if ((fp = fopen(filename, "rb")) == NULL){   
        printf("cannot open file\n");
        exit(1);
    }
    for (int i = 0; i < n; i++)
    {
        fscanf(fp,"%s",&(info[i].name));//输出数据到数组
        fscanf(fp,"%s",&(info[i].adr));
        fscanf(fp,"%d",&(info[i].tel));
        printf("%10s%15s%15d\n", info[i].name, 
        	info[i].adr, info[i].tel);//输出数据到屏幕
    }
    fclose(fp);
}
 
int main(void)
{
    char filename[50];
    printf("How many ?:\n");
    scanf("%d", &n);		
    printf("please input filename: ");
    scanf("%s", filename); 
    Create();       //调用函数建立链表
    save(filename); //调用函数存到文件
    free(phead);//释放phead内存
    show(filename); //调用函数输出文件
    system("pause");
    return 0;
}

我尝试过fread和fwrite的做法,但都失败了。

到此这篇关于C语言实现链表与文件存取的示例代码的文章就介绍到这了,更多相关C语言链表与文件存取内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言实现链表与文件存取的示例代码

本文链接: https://lsjlt.com/news/147281.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言实现链表与文件存取的示例代码
    目录此处为main函数的内容一、输入数据到链表中二、把链表数据存入文件三、输出文件完整代码本程序主要功能是建立链表,然后把链表数据存储到文件中,然后把文件数据存储到数组中并输出。 不...
    99+
    2024-04-02
  • C语言怎么实现链表与文件存取
    今天小编给大家分享一下C语言怎么实现链表与文件存取的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。此处为main函数的内容in...
    99+
    2023-06-30
  • C语言实现动态链表的示例代码
    目录结构体定义已经函数声明函数实现创建一个链表判断链表是否为空获得链表中节点的个数在某个特定的位置插入一个元素获得指定下标的节点的元素删除一个节点链表逆序链表的清空链表的销毁链表的遍...
    99+
    2024-04-02
  • C语言实现无头单向链表的示例代码
    目录一、易错的接口实现 1.1 新节点开辟函数 1.2 尾插 1.3 尾删 二、常见简单接口 2.1 打印链表 2.2 节点计数器 2.3 判断是否为空链表 2.4 通过值查找节点 ...
    99+
    2024-04-02
  • C语言实现线性动态(单向)链表的示例代码
    目录什么是链表为什么不用结构体数组链表的操作创建表删除元素插入元素代码及运行结果什么是链表 链表是数据结构里面的一种,线性链表是链表的一种,线性链表的延伸有双向链表和环形链表。在编程...
    99+
    2024-04-02
  • C/C++实现线性单链表的示例代码
    目录线性单链表简介C语言实现代码C++语言实现代码线性单链表简介 使用链存储结构的线性存储结构为线性单链表,线性存储结构是元素逻辑结构一对一,链存储结构是元素物理结构不连续,线性单链...
    99+
    2024-04-02
  • C语言实现手写Map(数组+链表+红黑树)的示例代码
    目录要求结构红黑树和链表转换策略hash使用要求 需要准备数组集合(List) 数据结构 需要准备单向链表(Linked) 数据结构 需要准备红黑树(Rbtree)数据结构 需要准备...
    99+
    2024-04-02
  • C语言实现栈的示例代码
    目录一、了解栈的结构特点二、具体实现补充 栈的用处一、了解栈的结构特点 栈是一种特殊的线性表,只允许从一端进出数据,称为后进先出,先进后出。 压栈:栈的插入操作叫做进栈/压...
    99+
    2024-04-02
  • C语言带头双向循环链表的示例代码
    目录前言结构分析链表的基本操作实现创建节点初始化链表链表销毁打印链表链表尾插链表尾删链表头插链表头删链表查找链表pos位置前面去插入删除pos位置链表判空代码复用总代码及头文件前言 ...
    99+
    2022-11-13
    C语言带头双向循环链表 C语言 双向循环链表 C语言 循环链表
  • C语言实现动态顺序表的示例代码
    目录顺序表概念及结构基本操作功能实现程序运行顺序表概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 分...
    99+
    2022-11-13
    C语言 动态顺序表 C语言 顺序表
  • GO语言实现文件上传的示例代码
    目录前言文件上传表单操作服务端操作流程实现小结前言 最近在写一个文件上传的功能,现在来进行整理总结一下go语言如何上传文件的,本文主要分享一下golang实现文件上传的流程和具体代码...
    99+
    2024-04-02
  • Android实现文件存储并读取的示例代码
    要求: 输入文件名,文件内容分别存储在手机内存和外存中,并且都可以读去取出来。 步骤: 1.创建一个名为CDsaveFile的Android项目 2.编写布局文件a...
    99+
    2022-06-06
    示例 存储 Android
  • C语言责任链模式示例代码
    目录介绍:作用:类比:示例:总结介绍: ​ 责任链模式是一种行为模式,它可以允许你将请求沿着处理者链进行发送,收到请求以后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处...
    99+
    2024-04-02
  • C语言单链表的图文示例讲解
    目录一、单链表的结构二、单链表的函数接口1. 申请结点及打印单链表2. 尾插尾删3. 头插头删4. 中间插入和删除1. 在 pos 指向的结点之后插入结点2. 在 pos 指向的结点...
    99+
    2023-02-14
    C语言单链表的基本操作 C语言单链表
  • Golang实现单链表的示例代码
    目录1. 定义节点2. IsEmpty():3. Length():4. AddFromHead():5. AddFromTail():6. Insert()7. Delet ...
    99+
    2023-03-15
    Golang 单链表
  • Java实现双链表的示例代码
    目录一、双向链表是什么二、具体方法实现定义结点下标访问异常获取链表长度打印链表清空链表头插法尾插法指定位置插入查找元素删除第一次出现的关键字删除所有值为key的节点三、完整代码一、双...
    99+
    2024-04-02
  • C语言实现静态存储通讯录的示例代码
    目录最初的构思与规划显示菜单以及main函数增加个人信息显示所有联系人的信息删除个人信息查找个人信息更改个人信息对联系人信息进行排序最后产品展示contart.h 头文件contar...
    99+
    2024-04-02
  • C语言模拟实现memmove的示例代码
    目录前言例子memmove的模拟实现具体实现步骤总结前言 上一篇我们介绍了memcpy和strcpy的区别,以及memcpy模拟实现,但这两个库函数都有一个缺点,那就是不能自己复制自...
    99+
    2022-12-29
    C语言实现memmove C语言 memmove
  • C语言实现大顶堆的示例代码
    目录堆的实现1.堆结构2.堆的种类3.大顶堆代码实现堆的实现 1.堆结构 逻辑结构上类似于 一棵 “树” 2.堆的种类 大顶堆结构: 一种特殊的树:其每个...
    99+
    2024-04-02
  • C语言实现通讯录的示例代码
    目录一、Contact.h文件二、Contact.c文件三、test.c文件一、Contact.h文件 包含函数的声明 #pragma once #define _CRT_SECUR...
    99+
    2022-11-13
    C语言实现通讯录 C语言 通讯录
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作