[英]Qsort with Huffman tree
我有一个必须建立霍夫曼树的问题,我了解问题背后的概念,并且知道该怎么做。 但是,我发现我的代码出错的原因是与排序功能有关。 我想在每次将新节点输入列表时对列表进行排序。 我有一个结构,在其中有频率,我制作了一系列结构,字符是从文件中存储的。
我的问题在于创建节点,创建一个新节点并指向数组中的两个字符。 但是,当我对列表进行排序时,指针将更改为其他字符。 每个步骤都会发生这种情况,并导致其完全错误。
我在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时,我的列表都会按频率正确排序。 为什么这会改变我结构体中的指针指向的位置? 提前致谢!!
qsort
在数组中四处移动结构。 因此,如果在数组的索引3处存在指向字符X
的left
指针,并且qsort
将X
移至索引16,则left
指针将不再指向X
这将指向任何qsort
在索引3长话短说地说,你需要重新计算所有的left
和right
各样后指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.