创建一个链表,用标准io读取文件数据插入链表,读取链表数据插入另一个文件

head.h

cs 复制代码
#ifndef __HEAD_H__
#define __HEAD_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<pthread.h>
#include<sys/wait.h>
#include<signal.h>
typedef char datatype[128];
typedef struct node{
	union{
		int len;
		datatype data;
	};
	struct node* next;
}*linklist;

linklist create_head();
linklist create_linknode(datatype key);
int  insert(linklist L,datatype key);
int out_file(FILE*fp_w,linklist L);
void mfree(linklist*L);
#endif

fun1.c

cs 复制代码
#include"head.h"
linklist create_head(){
	linklist L=(linklist)malloc(sizeof(struct node));
	if(NULL==L){
		printf("申请空间失败\n");
		return NULL;
	}
	L->len=0;
	L->next=NULL;
	return L;
}

linklist create_linknode(datatype key){
	linklist p=(linklist)malloc(sizeof(struct node));
	if(NULL==p){
		printf("申请空间失败\n");
		return NULL;
	}
	strcpy(p->data,key);
	p->next=NULL;
	return p;
}
int  insert(linklist L,datatype key){
	if(NULL==L){
		printf("传参失败\n");
		return -1;
	}
	linklist f=L;
	while(f->next!=NULL){
		f=f->next;
	}
	linklist p=create_linknode(key);
	if(p==NULL){
		printf("创建节点失败\n");
		return -1;
	}
	f->next=p;
	(L->len)++;
	return 0;
}
int out_file(FILE*fp_w,linklist L){
	linklist p=L->next;
	for(int i=0;i<L->len;i++){
		if(fprintf(fp_w,"%s",p->data)<0){
			perror("fprintf");
			return -1;
		}
		p=p->next;
	}
	return 0;
}
void mfree(linklist*L){
    if(NULL==L||NULL==*L){
        printf("传参无效\n");
        return ;
    }
    linklist p=*L;
    while(p==NULL){
        linklist pn=p;
        free(p);
        p=pn->next;
     }
    *L=NULL;
}

main.c

cs 复制代码
#include"head.h"

int main(int argc, const char *argv[])
{
	static char buf[128];
	 FILE*fp_r=fopen("../standard_io/cpy_f.c","r"); 
	if(fp_r==NULL){
		perror("fopen");
		return -1;
	}
	 FILE*fp_w=fopen("./1.c","w");
	if(fp_w==NULL){
		perror("fopen");
		return -1;
	}
	linklist L=create_head();
	while(1){
		if(fscanf(fp_r,"%s",buf)==-1){
			break;
		}
		insert(L,buf);

	}
	printf("文件读取完成\n");
	out_file(fp_w,L);
	printf("文件写入完成\n");
    mfree(&L);
	fclose(fp_r);
	fclose(fp_w);
	return 0;
}
相关推荐
逆境不可逃10 小时前
【LeetCode 912】排序数组——随机化快速排序详解
数据结构·算法·排序算法
Coder-magician10 小时前
《代码随想录》刷题打卡day31:动态规划-背包问题part02
算法·动态规划
薛定e的猫咪10 小时前
从因果视角解决多智能体协作:细读 SCIC 算法
算法
Forever Nore10 小时前
LeetCode 14 最长公共前缀 - 纵向扫描
linux·服务器·leetcode
c2385610 小时前
《算法武林谱:四大排序神功与二分寻宝术全解》
数据结构·算法·排序算法
拂拉氏10 小时前
【知识讲解】 Linux权限相关知识讲解
linux·权限
一米阳光866111 小时前
软考(中级)软件设计师核心笔记(9)算法——时间复杂度与空间复杂度、查找算法、排序算法
笔记·算法·职场发展·软考·软件设计师·中级职称
Mem0rin11 小时前
二分查找:左右边界
数据结构·算法
lazily-c11 小时前
数据结构模板
数据结构
桑榆41615 小时前
双系统(Windows + Ubuntu)安装流程
linux·windows·ubuntu