【问题标题】:Creating a linked list from a text file从文本文件创建链表
【发布时间】:2012-12-01 23:16:03
【问题描述】:

我正在自学链表,并提出了一个要解决的基本问题。我想逐行读取一个包含名称的文本文件并将每个名称添加到我的链接列表中。

文本文件的一个例子是:

John
Jacob
Jingleheimer
Smith

我无法弄清楚如何动态添加到我建议的链接列表中。这是我目前所拥有的。

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



int main(void)
{
    struct node {
        char *name;
        struct node* next;
    };


    static const char* fileName = "test.txt";
    FILE *fp = fopen(fileName,"r");
    char *line = NULL;
    size_t len = 0;
    ssize_t read;

    struct node* head = NULL; // first node

    if (fp == NULL)
        exit(EXIT_FAILURE);

    while ((read = getline(&line, &len, fp)) != -1)
    {
        //add line of text to linked list
    }
    if (line)
        free(line);

       exit(EXIT_SUCCESS);

}

任何指向正确方向的指针都会有所帮助。

【问题讨论】:

    标签: c algorithm text linked-list


    【解决方案1】:

    好的,要做到这一点,您需要首先分配一个节点条目,然后将您刚刚读取的行复制到其中。然后将其添加到列表中。 (我省略了错误处理,例如 malloc 返回 NULL)。

    /* This will store the last read line first */
    while ((read = getline(&line, &len, fp)) != -1)
    {
        struct node *n = malloc(sizeof(*n));
        n->name = strdup(line); /* copy the line since it can get reused by getline */
        n->next = head;
        head = n;
    }
    

    【讨论】:

    • 我需要列表插入部分的帮助。
    • 这与我现有的链表结构兼容吗?我收到错误
    • 您可能需要添加#include 但除此之外它对我有用,没有警告或错误。
    • 我搞定了。您是否有任何关于链接项目将具有“子”节点的提示,我也必须链接这些节点
    • 你的意思是如何将两个列表拼接在一起?搜索其中一个列表的末尾,然后在其中添加另一个。像这样的东西(分号很重要!): for(n = head2; n->next != NULL; n=n->next); n->下一个=头;头=头2;
    【解决方案2】:

    分配内存来保存字符串,将内存 = 设置为字符串。 那么

    node *next = malloc(sizeof(node));
    next->name = name;
    next->next = NULL;
    head->next = next;
    head = next;
    

    【讨论】:

    • 所以我把它放到我的循环中就可以了?
    • 没问题,但代码也会出现段错误。 head 第一次通过循环时为 NULL。
    • 我假设他意识到了这一点,并会在进入循环之前使其不为 NULL。
    • 如果你假设它,你应该这么说,因为 OP 不会假设你假设什么。未说明的假设破坏了许多项目;问美国宇航局的人因为没有检查单位而导致Mars Climate Orbiter 坠毁,或者在起飞后坠毁Ariane 5 火箭的欧空局人员因为起飞前所需的代码遇到溢出问题起飞后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多