基本上我必须将单词存储在链表中,每个字符都有自己的节点。我对嵌套结构感到困惑。我如何进入下一个节点?我知道我这样做完全错了,这就是我要问的原因。
#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...
}
答案 0 :(得分:5)
您有一个单词链接列表,每个单词都是一个链接的字符列表。我对吗?如果是这样,最好使用名称:
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;
现在,您可以根据需要填充列表。
答案 1 :(得分:4)
对于链表,您通常会有一个指向节点结构中下一个节点的链接。
typedef struct node
{
char letter;
struct node *next;
}NODE;
然后从任何给定节点NODE *n
,下一个节点是n->next
(如果不是NULL)。
insert
应扫描列表,直到找到n->next
为NULL,并在末尾分配一个新节点(确保将其next
设置为NULL)。
您可能希望在给定表索引的情况下使用函数初始化新列表,并使用单独的函数初始化新节点。