我正在尝试制作一个霍夫曼代码来练习C编码,并且我仍然保持同样的错误.
让我解释一下代码.首先,它创建下面的结构:
struct sNo {
int valor;
char letra;
struct sNo *esq;
struct sNo *dir;
};
typedef struct sNo sNo;
Run Code Online (Sandbox Code Playgroud)
然后它创建一个结构数组('否'):
sNo *No;
No = calloc(qtd_no, sizeof(sNo));
Run Code Online (Sandbox Code Playgroud)
它从键盘中读取一个字符串,在该数组中放置字母和它出现的次数.就像下面的代表'abracadabra'一样:
No: a/5 b/2 r/2 c/1 d/1
Run Code Online (Sandbox Code Playgroud)
现在,要创建一个Huffman树,我需要创建另一个数组('pNo'),并指向原始数组:
int qtd_pno = qtd_no;
sNo **pNo;
pNo = calloc(qtd_pno, sizeof(sNo*));
for (i = 0; i < qtd_pno; i++){
pNo[i] = &No[i];
}
Run Code Online (Sandbox Code Playgroud)
这两个数组看起来像这样:
No: a/5 b/2 r/2 c/1 d/1
pNo: a/5 b/2 r/2 c/1 d/1
Run Code Online (Sandbox Code Playgroud)
之后,它可以像下面那样对指针数组进行排序而不更改原始指针:
No: a/5 b/2 r/2 c/1 d/1
pNo: c/1 d/1 …Run Code Online (Sandbox Code Playgroud)