精华内容
下载资源
问答
  • struct Txl ... printf("不能打开文件"); return; } for(i=0;i;i++) { if(fwrite(p,LEN,1,fp)!=1) { printf("写入失败"); } p=p->next; } fclose(fp); } void main(){...}
  • c语言将链表写入二进制文件Problem statement: Write a C program to convert a binary tree into a single linked list by traversing level-wise. 问题陈述:编写一个C程序,通过逐级遍历二进制树转换为单个...

    c语言将链表写入二进制文件

    Problem statement: Write a C program to convert a binary tree into a single linked list by traversing level-wise.

    问题陈述:编写一个C程序,通过逐级遍历将二进制树转换为单个链表

    Example:

    例:

    Tree 1

    The above binary tree is converted to 2 → 7 → 5 → 2 → 6 → 9 → 5 → 11 → 4 → NULL

    上面的二叉树被转换为2→7→5→2→6→9→5→11→4→NULL

    Solution

    1. Building a linked list - Setting the first node as Head and then appending other nodes.

      构建链接列表 -将第一个节点设置为Head,然后附加其他节点。

    2. Traversing & displaying a single link list.

      遍历并显示单个链接列表

    3. Building a tree & level order traversal of a tree.

      建立树和树的层级遍历

    Algorithm:

    算法:

    1. Assign the root value as head node value in linked list.

      链接列表中将根值分配为头节点值。

    2. Do level-order traversal

      进行水平顺序遍历

      For each

      对于每个

      tree node create a single linked list node and append it to the linked list.

      树节点创建一个链接列表节点 ,并将其附加到链接列表。

    3. Display the single linked list.

      显示单个链接列表。

    How the tree is converted to the single list...

    树如何转换为单个列表...

    Let’s do solve the above example.

    让我们来解决上面的例子。

    Root=2;
    Queue status: 2
    ----------------------------------------------------
    
    1st iteration
    Queue not empty
    Queue front is 2
    Head is null, thus head is 2
    Linked list up to now:2->NULL
    Pop 2
    Push: 2->left(7) & 2->right(5)
    Queue status: 7, 5
    ----------------------------------------------------
    
    2nd iteration
    Queue not empty
    Queue front is 7
    Head is not null, thus append 7
    Linked list up to now:2->7->NULL
    Pop 7
    Push: 7->left(2)& 7->right(6)
    Queue status: 5, 2, 6
    ----------------------------------------------------
    
    3rd iteration
    Queue not empty
    Queue front is 5
    Head is not null, thus append 5
    Linked list up to now:2->7->5->NULL
    Pop 5
    Push: 5->right (9) only (5->left is NULL)
    Queue status: 2, 6, 9 
    ----------------------------------------------------
    
    4th iteration
    Queue not empty
    Queue front is 2
    Head is not null, thus append 2
    Linked list up to now:2->7->5->2->NULL
    Pop 2
    Push: Nothing ( both child are NULL)
    Queue status: 6, 9 
    ----------------------------------------------------
    
    5th iteration
    Queue not empty
    Queue front is 6
    Head is not null, thus append 6
    Linked list up to now:2->7->5->2->6->NULL
    Pop 6
    Push: 6->left(5) and 6->right(11)
    Queue status: 9, 5, 11
    ----------------------------------------------------
    
    6th iteration
    Queue not empty
    Queue front is 9
    Head is not null, thus append 9
    Linked list up to now:2->7->5->2->6->9->NULL
    Pop 9
    Push: 9->left(4) only (right child NULL)
    Queue status: 5, 11, 4
    ----------------------------------------------------
    
    7th iteration
    Queue not empty
    Queue front is 5
    Head is not null, thus append 5
    Linked list up to now:2->7->5->2->6->9->5->NULL
    Pop 5
    Push: Nothing (both child NULL)
    Queue status: 11, 4 
    ----------------------------------------------------
    
    8th iteration
    Queue not empty
    Queue front is 11
    Head is not null, thus append 11
    Linked list up to now:2->7->5->2->6->9->5->11->NULL
    Pop 11
    Push: Nothing (both child NULL)
    Queue status: 4 
    ----------------------------------------------------
    
    8th iteration
    Queue not empty
    Queue front is 4
    Head is not null, thus append 4
    Linked list up to now: 2->7->5->2->6->9->5->11->4->NULL
    Pop 4
    Push: Nothing (both child NULL)
    Queue status: empty queue
    ----------------------------------------------------
    
    Iteration stops
    So final link list is: 2->7->5->2->6->9->5->11->4->NULL
    
    
    

    通过逐级遍历将二叉树转换为单链接列表的C实现 (C implementation to to convert a Binary Tree into a Singly Linked List by Traversing Level by Level)

    #include <bits/stdc++.h>
    using namespace std;
    
    // tree node is defined
    class tree{    
    	public:
    		int data;
    		tree *left;
    		tree *right;
    };
    
    class sll{
        public:
        int data;
        sll* next;
    };
    
    sll* creatnode(int d){ //create node for single linked list
    	sll* temp=(sll*)malloc(sizeof(sll));
    	temp->data=d;
    	temp->next=NULL;
    	return temp;
    }
    
    void display(sll* head){
    	sll* current=head; // current node set to head
    
    	printf("displayig the converted list...\n");
    	while(current!=NULL){ //traverse until current node isn't NULL
    	    if(current->next)
    		printf("%d->",current->data);
    		else
    		printf("%d->NULL\n",current->data);
    		current=current->next; // go to next node
    	}
    }
    
    sll* flatten(tree* root)
    {
    	//Declare queue using STL 
    	sll* head=NULL,*tempL;
    	queue<tree*> q;
    	//enqueue the root
    	q.push(root);
    	vector<int> store;
    
    	tree* temp;
    	//do the level order traversal & build single linked list
    	while(!q.empty()){
    		//dequeue
    		temp=q.front();
    		q.pop();
    		if(head==NULL){//for inserting first node
    		    head=creatnode(temp->data);
    		    tempL=head;
    		}
    		else{//for inserting rest of the nodes
    		    tempL->next=creatnode(temp->data);
    		    tempL=tempL->next;
    		}
    		
    		// do level order traversing
    		if(temp->left)//for left child
    			q.push(temp->left);
    		if(temp->right)//for right child
    			q.push(temp->right);
    		
    	}
    	
    	
    	return head;
    
    }
    
    tree* newnode(int data)  // creating new node for tree
    { 
    	tree* node = (tree*)malloc(sizeof(tree)); 
    	node->data = data; 
    	node->left = NULL; 
    	node->right = NULL; 
    
    	return(node); 
    } 
    
    
    int main() 
    { 
    	//**same tree is builted as shown in example**
    	cout<<"same tree is built as shown in example\n";
    	tree *root=newnode(2); 
    	root->left= newnode(7); 
    	root->right= newnode(5); 
    	root->right->right=newnode(9);
    	root->right->right->left=newnode(4);
    	root->left->left=newnode(2); 
    	root->left->right=newnode(6);
    	root->left->right->left=newnode(5);
    	root->left->right->right=newnode(11);
    
    	cout<<"converting the tree into a single link list...\n";
    	cout<<"by traversing the tree level-wise\n";
    	sll* head=flatten(root);
    	//displaying the list built from the tree
    	display(head);
    
    	return 0; 
    } 
    
    

    Output

    输出量

    same tree is built as shown in example 
    converting the tree into a single link list...
    by traversing the tree level-wise
    displayig the converted list...
    2->7->5->2->6->9->5->11->4->NULL
    
    
    

    翻译自: https://www.includehelp.com/c-programs/convert-a-binary-tree-into-a-singly-linked-list-by-traversing-level-by-level.aspx

    c语言将链表写入二进制文件

    展开全文
  • 链表写入文件 */ void srcj ( listlink head ) { if ( head == NULL ) return ; listlink p = head -> next ; FILE * fp ; if ( ( fp = fopen ( "fle.txt" , "wt" ) ) == NULL...

    寻开心大哥写的

    在这里插入代码片
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    struct cj {
     char xh[10];
     char name[10];
     int gs;
     int cx;
     struct cj *next;
    };
    typedef struct cj jj,*listlink;
    void srcj(listlink head);
    void prin(listlink head);
    void append(listlink head);
    void display(listlink head);
    int main(void) 
    {
     int n;
     listlink head;
     head = (listlink)malloc(sizeof(jj));
     head->next = NULL;
     while(1) 
     {
      printf("0:Quit 1: 从文件读 2:写入文件  3:添加:");
      scanf("%d",&n);
      switch (n) 
      {
       case 2:
        printf("把数据写入到fle.txt文件昂中\n");
        srcj(head);
        break;
       case 1:
        printf("从fle.txt文件当中读取数据\n");
        prin(head);
        break;
       case 3:
        append(head);
        break;
       case 0:
        return 0;
        break;
       case 4:
        display(head);
        break;
      }
     };
     return 0;
    }
    /*
    把链表写入文件
    */
    void srcj(listlink head)
    {
     if ( head == NULL ) return;
     listlink p = head->next;
     FILE *fp;
     if( (fp=fopen("fle.txt","wt") )== NULL) 
     {
      printf("打开写入文件fle.txt失败\n");
      return;
     }
     while(p) 
     {
      fprintf(fp,"%s %s %d %d\n",p->xh, p->name, p->gs, p->cx);
      p = p->next;
     }
     fclose(fp);
    }
    /*
    从文件读取内容
    */
    void prin(listlink head)
    {
     if ( NULL == head) return;
     FILE *fp;
     listlink p = head;
     if((fp=fopen("fle.txt","r")) == NULL)
     {
      printf("打开fle.txt文件失败\n");
      return ;
     }
     while(1)
     {
      listlink q = (listlink)malloc(sizeof(jj));
      int nRead = fscanf(fp,"%s%s%d%d",q->xh,q->name, &q->gs,&q->cx);
      if ( 4 == nRead ) 
      {
       printf("%s\t%s\t%d\t%d\n",q->xh,q->name,q->gs,q->cx);
       p->next = q;
       p = q;
      }
      else 
      {
       free(q);
       break;
      }
     }
     p->next = NULL;
     fclose(fp);
    }
    void append(listlink  head) 
    {
     if ( NULL == head) return;
     listlink q = head;
     while(q->next ) q=q->next;
     listlink p = (listlink) malloc(sizeof(jj));
     printf("input data\n");
     scanf("%s%s%d%d", p->xh, p->name, &p->gs, &p->cx);
     q->next = p;
     p->next = NULL;
    }
    void display(listlink head) 
    {
     if ( NULL == head ) return;
     listlink p = head->next;
     while (p) 
     {
      printf("%s\t%s\t%d\t%d\n", p->xh, p->name, p->gs, p->cx);
      p=p->next;
     }
    }
    展开全文
  • 为什么输入数据后再读取链表,链表最后一个节点的数据总是会重复输出两次代码:#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语言将数据写入文件,用链表实现*/ #include #include #include /*定义结构体*/ typedef struct Node { char id[10]; /*学生学号*/ char name[20]; /*学生姓名*/ struct Node
    展开全文
  • c语言数据从链表写入文件和从文件读取到链表

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

    千次阅读 多人点赞 2018-09-15 08:59:22
    C语言利用文件系统实现简单的用户登录和注册功能 版本二:利用链表 此版本使用的链表,第一个版本使用的是数组 数组版本连接 这里我使用的线性链表,一定要注意在判断语句或赋值语句中不可...
  • C语言链表写入删除

    2011-11-19 03:28:07
    C语言链表的实现,可以实现链表写入删除功能。实用,简单,方便
  • C语言实现链表文件的存取

    千次阅读 多人点赞 2020-10-04 11:04:07
    作者:柠檬i,学习C时长两个月半的个人练习生 第一次写文章,难免有些不足,请多多包涵。 本程序主要功能是建立链表,然后把链表数据存储到文件中,然后把文件数据存储... 参考文章: c语言链表数据存入文件和读取文件
  • 不知道为什么出这样的错,毫无头绪 //稀疏多项式 #include #include typedef struct Ele { //定义多项式 float coef; //系数 int expn; //指数 }ele; typedef struct Node { //定义结点 ele* data;...
  • 已结贴√问题点数:20回复次数:12 如何将链表文件 fwrite()写入或 fread()读出? 请各位牛人异士。多多指教。。。fwrite(pstu,sizeof(struct student),1,fp);//向 fp 所指向的文件 stud 写入数据(输出)。fread...
  • c语言这一个双向链表,然后用fwrite写入文件,用fread读取,这个过程和单链表是一样的吗?
  • #include #include #includetypedef struct Node{int id;.../**按节点向文件写入数据*/void write(){FILE *f = fopen("test.txt","w");//以“w”(写)方式打开test.txtNode *temp = (Node *)malloc(...
  • c语言链表数据存入文件和读取文件

    万次阅读 多人点赞 2017-05-07 15:49:24
    c语言链表数据存入文件和读取文件
  • 在写一个通讯录管理系统,然后要把联系人的信息结构体放到链表中,然后将链表里的信息写入文件中,下次打开时还能从该文件读出数据。 链表头指针TEL,结构体中有name,tel,style,mail 四项,存入“telephone.txt"中。...
  • C语言实现简登录和注册功能C语言实现注册登录使用链表使用文件版本二:利用链表此版本使用的链表,第一个版本使用的是数组这里我使用的线性链表,一定要注意在判断语句或赋值语句中不可指针指向未定义的区域,这会...
  • 匿名用户1级2017-11-09 回答t_Link *FileRead(){FILE *fp;int ret;int filesize;t_Link *phead;t_Link *p;ret = 0;filesize = 0;phead = NULL;p = NULL;...if(NULL == fp)//打开文件保护{perror("open...
  • 简单的火车票管理系统(C语言链表文件

    千次阅读 多人点赞 2020-03-26 16:33:55
    这是大一刚学C语言一个学期完成的课设项目,里面的功能还可以进一步的完善,仅供分享、参考、记录使用,加油! 设计目的 随着社会的发展,为了满足人们的订车票需求,所以设计了一个车票管理系统,让用户可以查询...
  • c语言文件数据写入链表的问题

    千次阅读 2018-05-09 13:08:50
    大牛们帮我看看为什么我的代码只能读一组数据,多组数据写入时会覆盖前一组int bookread(){ ptcs p=head; int i,m,j=0; ptcs tem; FILE* fp; if((fp=fopen("D:\\bookdata.txt","rb"))==...
  • 链表插入示意图:(图是个人所画)因为链表指针指来指去,难以理解,所以辅助画图更加方便。 插入某个学号后面图: 定义的结构体: struct student { char ID[11]; //学生学号 char name[20]; //...
  • #ifndef STULIST_H #define STULIST_H typedef struct Node{ int id; char name[32]; double yu;...//向文件写入数据 int clear(node_t* p);//清空链表 #endif //STULIST_H在这里插入代码片
  • 将文件存储到链表里,然后关闭文件,再以只写格式打开,文件就是空的了,然后遍历链表,遇到删除目标跳过,其他写入,插入时在写入本结点内容同时再定义一个新的结构体指针并申请内存,输入,读取。 不用重建文件 ....
  • c语言结构体 链表

    万次阅读 多人点赞 2018-11-16 00:01:30
    接下来,我们链表进行介绍,用C语言分别实现:链表的初始化、创建、元素的插入和删除、链表的遍历、元素的查询、链表的删除、链表的逆序以及判断链表是否有环等这些常用操作。并附上在Visual Studio 2010 中可以...
  • C语言文件读取并写入链表

    万次阅读 多人点赞 2018-09-24 17:11:06
    C语言没啥要逼逼的,直接上代码,用心体会 #include "stdio.h" #include "stdlib.h" /***************************** 链表节点结构体 ****************************/ typedef struct link_node { int ID; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,493
精华内容 6,197
关键字:

c语言将链表写入文件

c语言 订阅