如何将表存入链表?

时间:2012-04-17 08:20:54

标签: c list linked-list huffman-code

所以,我做了一点阅读并咨询了朋友的帮助。我想我明白了吗?实际上,我在项目中的作用只是将字符和频率表存储到链表中。我写下了一些代码,如果有人能改进它,它是否有可能。

示例输入.txt文件(字符和频率表):
B1
D3
E7
J9

结构:

struct node {
  char info;
  int freq;
  struct node * next;   
  struct node * left, *right, *father;
};

typedef struct node * nodeptr;

nodeptr getnode(){  
return malloc(sizeof(struct node));
}

主程序(直到将表存储到链表中的部分):

string input;
nodeptr list = NULL;
FILE *fopen();
int c;
list = fopen("Huffman Table.txt","r");
c = getc(input) ;
while (c!= EOF)
{
    putchar(c);
    c = getc(input);
}
getch();
fclose(input);

for (node * row = table; row != NULL; row = row->next){
fprintf(file, "%s %i %i", row->info, row->freq);
}

我不确定这部分:

for (node * row = table; row != NULL; row = row->next)

我应该只使用它吗?

for(i=0;i<strlen(input);i++){

2 个答案:

答案 0 :(得分:0)

我不认为

for (node * row = table; row != NULL; row = row->next) 会工作,因为你想在第一个分号之前传入一个作业。

你正在做的是......我真的不知道..

for(i=0;i<strlen(input);i++){

会更好。但我不确定,因为我不知道假设持有什么字符串输入以及你如何使用

答案 1 :(得分:0)

用于循环的(语法上)完全没问题,并不常见。但是,什么是“表”指针?它是你的名单的根源吗?小注 - 如果你创建了“nodeptr”typedef,你应该在那里使用它。这就是它的用途。您关注的代码还有其他一些部分

  1. 你说它应该是一个链表,为什么你的结构有“父”指针?它看起来更像是一棵树。如果不是意图,请删除该字段。

  2. 我不确定我理解你编写的最后一段代码。如果要将列表的内容写入文件,则应使用上面提到的for循环。

  3. 对于这段代码的一般改进(看起来像我的作业,我猜应该被标记为),是使用std :: list&lt;&gt;。但是,如果您允许使用C ++而不是C语言进行编码,则只能这样做。