【问题标题】:Dynamic array of linked lists in CC中链表的动态数组
【发布时间】:2013-04-30 15:34:54
【问题描述】:

基本上我必须将单词存储在链表中,每个字符都有自己的节点。我对嵌套结构感到非常困惑。我如何去下一个节点?我知道我这样做完全错了,这就是我问的原因。

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

typedef struct node
{
    char letter;
}NODE;


typedef struct handle
{
    NODE **arr;
}HANDLE;

HANDLE * create();


void insert(handle **, char, int);

int main(int argc, char **argv)
{
    FILE *myFile;
    HANDLE *table = (HANDLE *)malloc(sizeof(HANDLE));
    NODE *linked = (NODE *)malloc(sizeof(NODE));
    int counter = 0;

    linked = NULL;
    table->arr[0] = linked;

    char c;


    myFile = fopen(argv[argc], "r");

    while((c = fgetc(myFile)) != EOF)
    { 
        if(c != '\n')
            insert(&table, c, counter);

        else
        {
            counter++;
            continue;
        }
    }
}


void insert(HANDLE **table, char c, int x)
{
    (*table)->arr[x]->letter = c; //confused on what to do after this or if this
                                  //is even correct...
} 

【问题讨论】:

标签: c linked-list dynamic-arrays


【解决方案1】:

你有一个单词的链接列表,每个单词都是一个字符的链接列表。我对吗?如果是这样,最好使用它们的名称:

typedef struct char_list
{
    char                    letter;
    struct char_list      * next;
} word_t;

typedef struct word_list
{
    word_t                * word;
    struct word_list_t    * next;
} word_list_t;

现在,您可以根据需要填充列表。

【讨论】:

    【解决方案2】:

    对于链表,您通常有一个到下一个节点的链接节点结构本身。

    typedef struct node
    {
        char letter;
        struct node *next;
    }NODE;
    

    然后从任何给定节点NODE *n,下一个节点是n-&gt;next(如果不是NULL)。

    insert 应该扫描列表,直到找到一个为 NULL 的 n-&gt;next,并在最后分配一个新节点(确保将其 next 设置为 NULL)。

    您可能需要一个函数来初始化一个给定表索引的新列表,以及一个单独的函数来初始化一个新节点。

    【讨论】:

      猜你喜欢
      • 2018-01-01
      • 2016-05-25
      • 2016-04-13
      • 2022-11-04
      • 2023-04-10
      • 1970-01-01
      • 2023-03-29
      • 2013-10-09
      • 2017-03-11
      相关资源
      最近更新 更多