繁体   English   中英

霍夫曼树与Qsort

[英]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处存在指向字符Xleft指针,并且qsortX移至索引16,则left指针将不再指向X 这将指向任何qsort在索引3长话短说地说,你需要重新计算所有的leftright各样后指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM