-1

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

示例输入 .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++){
4

2 回答 2

0

我不认为

for (node * row = table; row != NULL; row = row->next) 会起作用,因为您应该在第一个分号之前传递一个作业。

你在做什么是……我真的不知道……

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

会更好。但我不确定,因为我不知道应该保存什么字符串输入以及您如何使用

于 2012-04-17T08:44:50.487 回答
0

使用的 for 循环(在语法上)完全没问题,而且并不少见。但是,什么是“表”指针?它是您列表的根目录吗?小评论 - 如果您创建了“nodeptr”typedef,您应该在那里使用它。这就是它的用途。我担心您的代码的其他一些部分

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

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

至于对这段代码的总体改进(对我来说这看起来像是一个家庭作业,我想应该这样标记),就是使用 std::list<>。但是,只有在允许您使用 C++ 而不是 C 编写代码的情况下,才能这样做。

于 2012-04-17T08:44:58.180 回答