Я пытаюсь сделать HUFFMAN кодировщик .. но у меня возникают некоторые проблемы ...узлы и сооружения с
Это, как я определяю свою структуру узла ..
struct node{
int type,prob;
char *code;
struct node *left, *right;
};
Приказываю вероятностями и создать новый узел
struct node join_nodes(struct node no1, struct node no2)
{
struct node aux;
aux.type = 1;
aux.prob = no1.prob + no2.prob;
aux.right = &no1;
aux.left = &no2;
return aux;
}
Тогда я положил этот новый узел в списке узлов ..
void sort_hufman(struct node order_list[], struct node list[])
{
int i = N, len = N;
struct node aux;
for(i=N; i>N-2;i--)
{
sort(order_list, i);
len = len +1;
aux = join_nodes(order_list[i-1],order_list[i-2]);
list[len-1] = order_list[i-2] = aux;
}
}
Дело в том, что в этом Fuctions мой первый типы субномов равны 0 и 0, это означает, что они являются листьями, но я чешу в коде, который они изменяют, для типа 1 и 0 ... Я думаю, что это потому, что (я не знаю, почему указатели подузлов указывают на то же направление) .. но он не должен меняться ..
где список и список заказа я определил как * список и я сохранил место в памяти с помощью таНоса ...
Я не знаю, что это происходит ...
кто может мне помочь ??
ооо спасибо .. Я думал, что, когда я прохожу по значению аргумент его значение не изменится ... , но я не знаю, что значение будет disapear .. потому что вы указываете на направления no1 и no2, а не на переменные, которые вы проходите. Так что я не понимаю, когда я делаю joint_nodes (список [1], список [2]), например .. Что происходит с пропущенными точками от списка [1] и списком [2] ?? –
Я знаю, что actualy не является вероятностью, потому что это не значение между 0 и 1 .. это вы имеете в виду? Thaks снова! –
'aux-> prob = no1-> prob + no2-> prob;' Вы изменили их на указатель, помните? – wildplasser