【发布时间】:2015-12-09 18:15:50
【问题描述】:
我有一个问题,我必须构建一棵 Huffman 树,我了解问题背后的概念并且知道如何去做。但是,我发现我的代码出错的原因与我的排序功能有关。每次在列表中输入新节点时,我都想对列表进行排序。我有一个结构,其中我有频率,我创建了一个结构数组,这些结构从文件中存储了字符。
我的问题在于创建节点,创建一个新节点并指向数组中的两个字符。但是,当我对该列表进行排序时,指针会更改为其他字符。每一步都会发生这种情况,并导致它完全错误。
我在 main 中的 qsort 调用是这样的:
qsort(list, n, sizeof(Node), intcompare);
而我的 intcompare 函数是这样的:
int intcompare(const void *a, const void *b)
{
int freq1 = ((Node*)a)->frequency;
int freq2 = ((Node*)b)->frequency;
if (freq1 == freq2){
return 0;
}
else if (freq1 < freq2){
return 1;
}
else{
return -1;
}
}
我的结构是这样的:
typedef struct node{
char character;
int frequency;
struct node *left;
struct node *right;
}Node;
每次调用 qsort 时,我的列表都会按频率正确排序。 为什么这会改变我的结构中的指针指向的位置? 提前致谢!!
【问题讨论】:
标签: c tree binary-tree huffman-code qsort