将链表输出到txt文件

时间:2014-06-04 10:29:15

标签: c linked-list printf

您好我正在尝试将链接列表导出到文本文件,但不知何故文本文件达到非常大的大小(5gb)并且没有打开。

如果你能看到问题所在,我会很高兴并为我提供一个修复她的方法谢谢

我的代码 -

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
int data;
struct node *next;
} node;

node* insert(node* head, int num);
void free_list(node *head);
void fprintfList(node *head); 

int main()
{


int num;
int temp;
node *head, *p;
head = NULL;
FILE * MyFile;

do 
{
    printf("Enter numbers\n");
    scanf("%d",&num);
    if(num) 
    {
        head = insert(head, num);
    }
} while(num);
p = head;

MyFile = fopen("New_File.txt","w");

while(head) 
{
    fprintf(MyFile, "%d\n",head->next);
} 



//fprintfList(head); 
free_list(head);
fclose(MyFile);
return 0;
}




node* insert(node* head, int num) 
{
node *temp, *prev, *next;
temp = (node*)malloc(sizeof(node));
temp->data = num;
temp->next = NULL;
if(!head){
    head=temp;
} else{
    prev = NULL;
    next = head;
    while(next && next->data<=num){
        prev = next;
        next = next->next;
    }
    if(!next){
        prev->next = temp;
    } else{
        if(prev) {
            temp->next = prev->next;
            prev-> next = temp;
        } else {
            temp->next = head;
            head = temp;
        }            
    }   
}
return head;
}


void free_list(node *head) 
{
node *prev = head;
node *cur = head;
while(cur) 
{
    prev = cur;
    cur = prev->next;
    free(prev);
}       
}

1 个答案:

答案 0 :(得分:0)

while(head) 
{
    fprintf(MyFile, "%d\n",head->next);
} 

你的问题就在这里。循环直到head为NULL,但从未实际更改head指针,因此您只需循环写入相同的数据,直到磁盘空间不足为止。此外,您还要打印next指针的值,而不是实际存储在节点中的数据。

首先需要打印实际数据,因此请将fprintf更改为:

fprintf(MyFile, "%d\n",head->data);

其次,您实际上需要遍历列表,如下所示

while(head) 
{
    fprintf(MyFile, "%d\n",head->data);
    head = head->next;
}