精华内容
下载资源
问答
  • } struct node* output_list(struct node* head)//输出链表 { struct node* p = head->next; while (p) { output(p); p = p->next; } return 0; } struct node* colorinsert_w(struct node* head)//结尾插入 { ...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    #define _CRT_SECURE_NO_WARNINGS

    #include

    #include

    #include

    struct node* list();

    struct node* head();

    struct Node* colour_list();

    struct node* output(struct node* p);

    struct node

    {

    char contractnumber[20];//合同号

    char name[20];//产品名称

    int quantity;//数量

    struct Node* colour;//颜色

    struct node* next;

    };

    struct Node

    {

    char colour[20];//颜色

    int number;//数量

    struct Node* next;

    };

    struct node* list()//申请新节点

    {

    struct node* p = (struct node*)malloc(sizeof(struct node));

    p->next = NULL;

    return p;

    }

    struct node* head()//头节点

    {

    struct node* p = list();

    return p;

    }

    struct Node* colour_list()//申请颜色节点

    {

    struct Node* p = (struct Node*)malloc(sizeof(struct Node));

    p->next = NULL;

    return p;

    }

    void fwrite()//保存数据

    { FILE* fp = NULL;

    fopen_s(&fp, "dong6.dat", "wb+");

    if (!fp)

    {

    printf("建立文件失败!\n");

    return;

    }

    fclose(fp);

    }

    void fwrite_fp(struct node* head)//保存数据

    {

    struct node* p = head;

    FILE* fp = NULL;

    fopen_s(&fp, "dong6.dat", "ab+");

    if (!fp)

    {

    printf("打开文件失败!\n");

    return;

    }

    else

    {

    if (p == NULL)

    {

    printf("没有数据无法保存!\n");

    return;

    }

    else

    {

    while (p)

    {

    struct Node* p1 = p->colour;

    while (p1)

    {

    fwrite(p1, sizeof(p1), 1, fp);

    p1 = p1->next;

    }

    fwrite(p, sizeof(p), 1, fp);

    p = p->next;

    }

    }

    }

    fclose(fp);

    }

    void fread_fp(struct node* head)//读取数据

    {

    struct node* p =head;

    FILE* fp = NULL;

    fopen_s(&fp, "dong6.dat", "wb");

    if (!fp)

    {

    printf("打开文件失败!\n");

    return;

    }

    else

    {

    while (feof(fp) == 0)

    {

    struct node* newp = list();

    struct Node* p1 = colour_list();

    newp->colour= p1;

    while (p->next != NULL)

    {

    p = p->next;

    }

    fread(newp,sizeof(newp),1,fp);

    while (p1)

    {

    fread(p1, sizeof(p1), 1, fp);

    p1 = p1->next;

    }

    p->next = newp; } }

    fclose(fp);

    }

    void input(struct node* p)

    {

    char c = 'c';

    struct Node* p1 = colour_list();//颜色头节点

    p->colour = p1;//颜色头节点赋值

    printf("请输入合同号:\n");

    scanf_s("%s", &p->contractnumber, 20);

    printf("请输入产品名称:\n");

    scanf_s("%s", &p->name, 20);

    printf("请输入合同数量:\n");

    scanf_s("%d", &p->quantity);

    while (1)

    {

    struct Node* p2 = colour_list();//颜色申请新节点

    while (p1->next != NULL)

    {

    p1 = p1->next;

    }

    printf("请输入颜色:\n");

    scanf_s("%s", &p2->colour, 20);

    printf("请输入%s色数量:\n", p2->colour);

    scanf_s("%d", &p2->number); p1->next = p2;

    printf("是否有其他颜色?(y/n)\n");

    scanf_s(" %c", &c, 1); if (c == 'n' || c != 'y')

    {

    c = 'c';

    break;

    }

    }

    }

    struct node* output(struct node* p)//输出单个链表

    {

    struct Node* p1;

    printf("合同号:%s\t产品名称:%s\t数量:%d\n", p->contractnumber, p->name, p->quantity);

    p1 = p->colour->next;

    while (p1)

    {

    int i = 0;

    printf("%s\t%d\t", p1->colour, p1->number);

    i++;

    if (i % 2 == 0)

    {

    printf("\n");

    }

    p1 = p1->next;

    }

    printf("\n");

    return 0;

    }

    struct node* output_list(struct node* head)//输出链表

    {

    struct node* p = head->next;

    while (p)

    {

    output(p);

    p = p->next;

    }

    return 0;

    }

    struct node* colorinsert_w(struct node* head)//结尾插入

    {

    struct node* p=head; while (1)

    {

    char c = 'c';

    struct node* newp = list(); if (p->next != NULL)

    {

    while (p->next != NULL)

    {

    p = p->next;

    }

    }

    input(newp);

    p->next = newp;

    printf("是否有其他合同?(y/n)\n");

    scanf_s(" %c", &c, 1);

    if (c == 'n' || c != 'y')

    {

    c = 'c';

    break;

    }

    }

    return p;

    }int main()

    {

    struct node*p= head();

    colorinsert_w(p);

    fwrite_fp(p);

    fread_fp(p);

    output_list(p);

    return 0;

    }

    展开全文
  • 功能:添加,删除,查找,全部输出。 添加时自动保存到文件, 查找、全部输出时从文件中读取; 复制粘贴即可运行!绝对好用
  • 当前位置:我的异常网» C语言»链表透过文件读写计算两个多项式之积链表透过文件读写计算两个多项式之积www.myexceptions.net网友分享于:2014-03-24浏览:10次链表通过文件读写计算两个多项式之积写了这个程序,...

    当前位置:我的异常网» C语言 » 链表透过文件读写计算两个多项式之积

    链表透过文件读写计算两个多项式之积

    www.myexceptions.net  网友分享于:2014-03-24  浏览:10次

    链表通过文件读写计算两个多项式之积

    写了这个程序,输出结果

    10061572.jpg

    怎样才能改正啊,我是新人不怎么会调试,请大神指导!

    // 数据结构02.cpp : 定义控制台应用程序的入口点。

    //

    #include "stdafx.h"

    #include 

    #include 

    #define NULL 0

    #define LEN sizeof(struct polyn)

    typedef struct polyn

    {

    double coef;

    double e;

    struct polyn *next;

    }POLYN;

    POLYN *creatpolyn();//创建多项式

    void InsertPolyn(POLYN *head, POLYN* s);//排序插入,从小到大,且合并同类项

    void polynout(POLYN *head, char *s);//输出多项式

    POLYN *polynmulti(POLYN *ha, POLYN *hb);//多项式求积

    void Clearlist(POLYN *head);//释放链表

    int main()

    {

    POLYN *ha,*hb,*hc;

    ha = creatpolyn();

    polynout(ha,"ha;");

    hb = creatpolyn();

    polynout(hb,"hb;");

    Clearlist(ha);

    Clearlist(hb);

    return 0;

    }

    POLYN *creatpolyn()

    {

    POLYN *phead = NULL;

    POLYN *pnode = NULL;

    phead = (struct polyn*)malloc(LEN);

    if (NULL== phead)

    return NULL;

    phead ->coef = 0;

    phead->e = -1;

    phead->next = NULL;

    POLYN polyn;

    FILE *fp1;

    fopen_s(&fp1,"F:\\file1.txt","rt");

    if(!fp1)

    {

    printf("Error!Cannot open file.");

    return 0;

    }

    while(fscanf(fp1,"%d %d\n",&polyn.coef,&polyn.e)==2)

    {

    POLYN *polynmulti = new POLYN;

    memcpy(polynmulti,&polyn,LEN);

    pnode=(struct polyn*)malloc(LEN);

    if (NULL == pnode)

    break;

    pnode->coef = polyn.coef;

    pnode->e = polyn.e;

    pnode->next = NULL;

    InsertPolyn(phead,pnode);

    printf("coef1:%d,e1:%d\n",*phead,*pnode);

    fclose(fp1);

    }

    FILE *fp2;

    fopen_s(&fp2,"F:\\file2.txt","rt");

    if(!fp2)

    {

    printf("Error!Cannot open file.");

    return 0;

    }

    while(fscanf(fp2,"%d %d\n",&polyn.coef,&polyn.e)==2)

    {

    POLYN *polynmulti= new POLYN;

    pnode=(struct polyn*)malloc(LEN);

    if (NULL == pnode)

    break;

    pnode->coef = polyn.coef;

    pnode->e = polyn.e;

    pnode->next = NULL;

    InsertPolyn(phead,pnode);

    printf("coef2:%d,e2:%d\n",*phead,*pnode);

    fclose(fp2);

    }

    return phead;

    }

    void InsertPolyn(POLYN *phead, POLYN* s)

    {

    POLYN *p = NULL;

    POLYN *q = NULL;

    POLYN *r = NULL;

    if(NULL == phead||NULL==s)

    return;

    if(NULL == phead->next)

    {

    phead->next = s;

    return;

    }

    p = phead->next;

    q = s;

    while(p!= NULL)

    {

    if(p->e == q->e)

    {

    p->coef += q->coef;

    return;

    }

    p=p->next;

    }

    p = p->next;

    if(p->e > q->e)

    {

    q->next = p;

    phead->next = p;

    return;

    }

    while(p!=NULL){

    if(p->e > q->e)

    break;

    r = p;

    p = p->next;

    }

    q->next = r->next;

    r->next = q;

    }

    void polynout(POLYN *phead,char *s)

    {

    FILE *fp3;

    fopen_s(&fp3,"F:\\output.txt","wt");

    if(!fp3)

    {

    printf("Error!Cannot open file.");

    }

    POLYN *p = NULL;

    if(NULL == phead)

    return;

    p = phead->next;

    if(NULL != p)

    {

    while(1)

    {

    if(NULL == p)

    {

    break;

    }

    printf("coef:%d,e:%d\n",p->coef,p->e);

    fprintf(fp3,"coef: %d, e:%d\n",p->coef,p->e);

    p = p->next;

    }

    }

    fclose(fp3);

    }

    POLYN *polynmulti(POLYN *ha,POLYN *hb)

    {

    POLYN *pa = NULL;

    POLYN *pb = NULL;

    POLYN *phead = NULL;

    POLYN *pnode = NULL;

    if(NULL == ha)

    {

    if(hb == NULL)

    {

    return NULL;

    }

    else{

    return hb;

    }

    }

    phead=(struct polyn*)malloc(LEN);

    if(NULL == phead)

    return NULL;

    phead->coef = 0;

    phead->e = -1;

    phead->next = NULL;

    pa = ha->next;

    pb = hb->next;

    while(NULL != pb)

    {

    while (NULL != pa)

    {

    double tempcoef = 0;

    double tempe = 0;

    tempcoef = pa->coef *pb->coef;

    tempe = pa->e + pb->e;

    pnode = (struct polyn *)malloc(LEN);

    if(NULL == pnode)

    break;

    pnode->coef = tempcoef;

    pnode->e = tempe;

    文章评论

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

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

    近快一年没有接触c语言了,今天学妹问我了链表数据存如文件和读取文件到链表怎么实现,现在搞开发很少用文件,都是用数据库,在这儿我还是写一下简单的文件读取链表的操作。在c语言中,创建单链表需要使用到malloc函数动态申请内存;文件的读写需要首先使用fopen函数打开文件,然后使用fscanf,fgetc, fgets,fprintf,fputc,fputs等函数读写函数,最后读写完毕要使用fclose函数关闭函数。


    下面的源程序展示了关于单链表如何从文件中读取数据和往文件里存入数据。

    typedef struct node {
        int data;
        struct node *next;       
    }node;
      
      
    //从文件中读取数据存入链表 
    node *createlink()
    {
        node *head =(node*)malloc(sizeof(node));
        int t;
        node *p;
        node *q;
        p=q=head;
        FILE * r= fopen("input.txt","r");
        if(r==NULL)
        {
            printf("打开文件失败!");
            return NULL; 
        }
         
        while(fscanf(r,"%d",&t)!=EOF)
        {  
           q= (node*)malloc(sizeof(node));
           q->data=t;
           p->next=q;
           p=q;
        }
        p->next=NULL;
        return head;
    }
      
     
    //输出链表到屏幕和文件output.txt 
    void outlink(node *head)
    {
       node *p=head->next;
       FILE *w =fopen("output.txt","w");
       if(w==NULL)
       {
           printf("打开文件失败!");
           return
       }
       while(p)
       {
           //输出链表节点数据到屏幕 
           printf("%d ",p->data);
           //输出链表节点数据到文件output.txt 
           fprintf(w,"%d ",p->data);
           p=p->next;        
       }     
       printf("\n");
       fprintf(w,"\n");
       fclose(w);
       return;
    }
      
    int main()
    {
        node *head;
        int n,m;
        head=createlink();
        outlink(head);
        system("pause");
        return 0;
    }

    展开全文
  • 链表的写入文件 /*====================存储彩票信息========================*/ /*功能:将彩票的全部数据写入文件 *参数:彩票数据链表 *返回值:布尔类型,读出成功返回TRUE,否则返回FALSE */ boolean ...

    链表的写入文件

    /*====================存储彩票信息========================*/
    /*功能:将彩票的全部数据写入文件
    *参数:彩票数据链表
    *返回值:布尔类型,读出成功返回TRUE,否则返回FALSE
    */
    boolean writeLotteryInfo(LOTTERY *head)
    {
    	FILE *fp;LOTTERY *current;
    	boolean success=FALSE;
    	current=head->next;
    	if(current==NULL)
    	{
    		return FALSE;
    	}
    	if((fp=fopen("lotteryinfo.txt","wb+"))==NULL)
    	{
    		printf("打开文件出现错误。\n");
    		exit(1);
    	}
    	while(current!=NULL)
    	{
    		if(fwrite(current,LOT_LEN,1,fp)==1)
    		{
    			success=TRUE;
    			current=current->next;
    		}
    	}
    	fclose(fp);
    	return success;
    }
    

    从文件读出链表数据

    /*====================读取彩票信息========================*/
    /*功能:从文件里读出彩票的全部数据
    *参数:彩票数据链表
    *返回值:布尔类型,读出成功返回TRUE,否则返回FALSE
    */
    boolean readLotteryInfo(LOTTERY *head)
    {
    	FILE *fp;LOTTERY *new_lottery,*current;
    	boolean success=FALSE;
    	current=head;
    	if((fp=fopen("lotteryinfo.txt","rb+"))==NULL)
    	{
    		printf("打开文件出现错误。\n");
    		exit(1);
    	}
    	while(!feof(fp))
    	{
    		new_lottery=(LOTTERY *)malloc(LOT_LEN);
    		if(new_lottery==NULL)
    		{
    			printf("分配内存出现错误。\n");
    			exit(1);
    		}
    		memset(new_lottery,'\0',LOT_LEN);
    		if(fread(new_lottery,LOT_LEN,1,fp)==1)
    		{
    			success=TRUE;
    			current->next=new_lottery;
    			current=new_lottery;
    		}
    	}
    	fclose(fp);
    	return success;
    }

    链表的销毁

    /*====================销毁彩票信息链表====================*/
    /*功能:将全部彩票的数据的链表销毁
    *参数:彩票数据链表
    *返回值:布尔类型,读出成功返回TRUE,否则返回FALSE
    */
    boolean destroyLotteryLink(LOTTERY *head)
    {
    	LOTTERY *current;
    	boolean success=FALSE;
    	if(head->next==NULL){
    		success=TRUE;
    	}
    	else
    	{
    		current=head->next;
    		while(current!=NULL)
    		{
    			head->next=current->next;
    			free(current);
    			current=NULL;
    			current=head->next;
    		}
    	success=TRUE;
    	}
    	return success;
    }
    


    展开全文
  • } void allOut(C* class0) {//输出整个链表 if (class0->next == NULL) { printf("班级为空!\n"); return; } C* p = class0->next; printf("姓名\t学号\t年龄\t\t数学成绩\t英语成绩\t物理成绩\t总成绩\n...
  • c语言链表

    2021-01-13 00:20:45
    c语言暂时更新完毕 链表实现 链表改进及其函数 补充知识volatile关键字 链表实现 #include <stdio.h> #include "node.h" #include <stdlib.h> //node头文件内容: //typedef struct _node{ // ...
  • C语言文件读写

    2013-04-16 22:41:55
    C语言实现度文件的读取,有源代码。 一个简单的实例。 文件读写
  • c语言实现, 链表初学使用, 文件读写, 已通过测试
  • 学生成绩管理语言用C语言写的,用链表实现,包含查询模块,更新模块,输入输出模块,统计模块,文件读写模块,主程序。
  • C语言链表各类操作详解

    千次阅读 2019-01-23 23:17:09
    获取链表第i个数据的算法思路: 声明一个指针p指向链表的第一个结点,初始化j从1开始; 当j&amp;lt; i 时,遍历链表,让p的指针向后移动,不断指向下一结点,j累加1; 若到链表末尾p为空,说明第i个元素不存在...
  • 药店管理系统(c语言链表实现)

    千次阅读 2020-03-07 14:41:57
    数据读取:用文件中的数据可以进行读写操作4. 数据修改:对以存在的旧数据进行修改操作5. 数据插入:可以将新数据插入任意指定位置6. 数据删除:可以对以存在的旧数据进行删除操作7. 数据查询:按要求进行数据查询8. ...
  • 链表读写不是很懂 也是照着网上自己改的 怎样避免出现乱码?求指点[img=http://img.my.csdn.net/uploads/201211/25/1353826485_7682.jpg][/img] #include <stdio.h> #include <stdlib.h> ...
  • 程序名称:学生成绩管理系统 功能要求:录入学生成绩,修改学生成绩,统计每个学生的总分及平均分并能根据学生的平均成绩排序,查询学生成绩,输出...能够保存学生成绩,实现文件读写。界面简洁大方,易操作。 ...
  • 以下代码为初始化单链表,将单链表里的节点数据写入文件,再从文件中读出创建新的单链表,然后打印新的单链表。 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct node {...
  • C语言文件读写操作,从文件读取数据
  • 链表文件读写实例

    千次阅读 2018-12-12 22:07:11
    12月份的第一篇博客,最近忙着吃鸡、忙着上班,写好的代码一直没有发布上来。...2、c语言文件读写操作(fgets读取文本内容后去除’\n’) fopen()第二个参数 3、C语言时间函数(具体请百度自学) tim...
  • 梓益C语言学习笔记之链表&动态内存&文件一、定义:链表是一种物理存储上非连续,通过指针链接次序,实现的一种线性存储结构。二、特点:链表由一系列节点(链表中每一个元素称为节点)组成,节点在运行时动态生成...
  • c语言链表结构,实现一个学生管理系统,并将信息保存到本地文件
  • 双向链表其实是单链表的改进。 当我们对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时,又必须从表头开始查找。这是由单链表结点的结构所限制的。因为单链表每个结点只有一个存储直接后继结点地址的链...
  • 《学生证管理系统》C语言链表版(附带图文讲解)

    千次阅读 多人点赞 2019-05-14 22:01:24
    (7)一定要用链表文件操作 起初想想应该随随便便一天就搞定的,但是写完链表操作后发现原来文件读写是个大大的坑,搞了好几个星期,今天终于搞定了。 正文开始: 流程设计: 总图: 1.读文档操作(这里最难了) ...
  • 今日,写一个小系统时,因为结构体过长,欲用二进制一次性保存一个节点,结果在读取文件时却出现了一堆 屯, 这就很尴尬了。 左思右想,右思左想,百度完,去谷歌,谷歌完,又必应,必应问完贴吧问,贴吧问完CSDN...
  • 学生成绩管理系统 C语言 链表 文件读写 成绩分析 测试编译环境 VC&CFREE5
  • 学生成绩管理系统(基于链表文件读写操作) 本程序为作者的大一下学期的c语言期末作业,如有问题和不足,欢迎大家指出共同探讨。 程序主要实现的功能有:学生信息的录入(动态链表创建),输出所有学生信息(链表遍历),...
  • //插入到新的双向链表 mp->prev=q; q=mp; p=head->next;//设置新初始,开始下一次循环 } q->next=NULL; return h; } void find_list(PLP head) { char cons[12]; int i=1,j=0; PLP p; p=head->next; ...
  • 包含了对指针数组,数组指针的实例应用,对深入理解指针有很好的帮助;链表操作有双向循环链表的操作,可以用于实际应用;文件读写,以巧妙的方式读取文件内容,并且把文件中的内容存放到数组中,方便可靠。
  • 程序启动后,首先打开固定的已加密文件信息保存文件,读取文件信息存在到链表中。然后等待用户输入命令。 如果用户输入1:程序请求输入待加密文件文件名,如果用户输入错误的文件名,程序显示提示信息后返回主界面,...
  • //将当前最小节点移出链表 } if(first==NULL) { first=min; tail=first; } else { tail->next=min; tail=min; } } if(b->next==NULL) { tail->next=b; tail=b; } ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,063
精华内容 5,625
关键字:

c语言链表文件读写

c语言 订阅