所以,我做了一点阅读并咨询了朋友的帮助。我想我明白了吗?实际上,我在项目中的作用只是将字符和频率表存储到链表中。我写下了一些代码,如果有人能改进它,它是否有可能。
示例输入.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++){
答案 0 :(得分:0)
我不认为
for (node * row = table; row != NULL; row = row->next)
会工作,因为你想在第一个分号之前传入一个作业。
for(i=0;i<strlen(input);i++){
会更好。但我不确定,因为我不知道假设持有什么字符串输入以及你如何使用行和表
答案 1 :(得分:0)
用于循环的(语法上)完全没问题,并不常见。但是,什么是“表”指针?它是你的名单的根源吗?小注 - 如果你创建了“nodeptr”typedef,你应该在那里使用它。这就是它的用途。您关注的代码还有其他一些部分
你说它应该是一个链表,为什么你的结构有“父”指针?它看起来更像是一棵树。如果不是意图,请删除该字段。
我不确定我理解你编写的最后一段代码。如果要将列表的内容写入文件,则应使用上面提到的for循环。
对于这段代码的一般改进(看起来像我的作业,我猜应该被标记为),是使用std :: list&lt;&gt;。但是,如果您允许使用C ++而不是C语言进行编码,则只能这样做。