链表基础5(超简单)--链表写入文件

链表基础部分可以看我以前写的:
链表基础1(超简单)–创建一个长度为n的单链表
链表基础2(超简单)–单链表的插入和删除
链表基础3(超简单)–单链表的逆序
链表基础4(超简单)–创建一个长度为n的双向链表(代码可运行)

#include "stdio.h"
#include "stdlib.h"
typedef struct linked_list
{
   int data;
   struct linked_list *pnext;
}link;

link *pnew;
link *ptmp;
link *phead;
int count=1;
void creat_head(void);
void add_link(int num);
void sav_link(void);
void red_link(void);
void pri_link(void);

int main(void)
{
 int list_long;
 int del_num;
 int add_num,n;
 red_link();
 while(1)
 {
 int flag=0;
 printf("***************************\n");
 printf("1、增加节点     2、保存\n");
 printf("3、打印链表\n");
 printf("***************************\n");
 scanf("%d",&flag);
 if(flag==1)
  {
   printf("请输入需要创建的链表长度(>1)\n");
   scanf("%d",&list_long);
   creat_head();
   add_link(list_long);
  }
 if(flag==2)
  {
    sav_link();

  }
 if(flag==3)
  {
  printf("链表为:\n");
  pri_link();
  }
  if(flag==4)
  {

    return 0;
  }
 }
 return 0;
}

//头节点的创建
void creat_head(void)
{
    phead=(link *)malloc(sizeof(link));
    phead->data=0;
    phead->pnext=NULL;
}
//链表节点的添加
void add_link(int num)
{
 int i;
 for(i=0;i<=num;i++)
 {
   pnew=(link *)malloc(sizeof(link));
   pnew->data=count;
   ptmp=phead;
   while(ptmp->pnext!=NULL)
   {
      ptmp=ptmp->pnext;
   }
   ptmp->pnext=pnew;
   count++;
 }
}


void sav_link(void)
{
 FILE *fp;
 fp=fopen("./data_save.txt","w+");
 ptmp=phead->pnext;
 while(ptmp->pnext!=NULL)
 {
   fwrite(ptmp,sizeof(link),1,fp);
   ptmp=ptmp->pnext;
 }
 fclose(fp);
}

void red_link(void)
{
 FILE *fp;
 fp=fopen("./data_save.txt","r+");
 if(fp==NULL)
 {
    return;
  }
 creat_head();
 ptmp=phead;
 for(int i=0;i<=9;i++)
  {
  pnew=(link *)malloc(sizeof(link));
  fread(pnew,sizeof(link),1,fp);
  ptmp->pnext=pnew;
  pnew->pnext=NULL;
  ptmp=ptmp->pnext;
  }
  fclose(fp);

}

void pri_link(void)
{
 for(ptmp=phead->pnext;ptmp->pnext!=NULL;ptmp=ptmp->pnext)
 {
   printf("%d ", ptmp->data);
 }
 printf("\n");
}

运行实测:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看保存的文件:
在这里插入图片描述
为什么是乱码这个我没想明白…
还有写保存的时候,从链表头开始写入文件,读取的时候应该先读的是链表尾,为何输出还是顺序的。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值