哈夫曼树及哈夫曼编码的C程序实现(数据结构题)问题描述〕输入一个有n个叶结点的权值构造一棵哈夫曼树;(例如:n=8,权值为 5 29 7 8 14 23 3 11) 根据哈夫曼树构造哈夫曼编码,用指向字符

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/02 22:16:19
哈夫曼树及哈夫曼编码的C程序实现(数据结构题)问题描述〕输入一个有n个叶结点的权值构造一棵哈夫曼树;(例如:n=8,权值为 5 29 7 8 14 23 3 11) 根据哈夫曼树构造哈夫曼编码,用指向字符

哈夫曼树及哈夫曼编码的C程序实现(数据结构题)问题描述〕输入一个有n个叶结点的权值构造一棵哈夫曼树;(例如:n=8,权值为 5 29 7 8 14 23 3 11) 根据哈夫曼树构造哈夫曼编码,用指向字符
哈夫曼树及哈夫曼编码的C程序实现(数据结构题)
问题描述〕输入一个有n个叶结点的权值构造一棵哈夫曼树;(例如:n=8,权值为 5 29 7 8 14 23 3 11) 根据哈夫曼树构造哈夫曼编码,用指向字符串的指针数组来存放,从叶子到树根逆向求每个结点的哈夫曼编码

哈夫曼树及哈夫曼编码的C程序实现(数据结构题)问题描述〕输入一个有n个叶结点的权值构造一棵哈夫曼树;(例如:n=8,权值为 5 29 7 8 14 23 3 11) 根据哈夫曼树构造哈夫曼编码,用指向字符
//
#include
#include
#include
#include "linkqueue.h"
bitree *CreateEmptyList()
{
bitree *h;
h = (bitree *)malloc(sizeof(bitree));
h->next = h->lchild = h->rchild = NULL;
return h;
}
void InsertList(bitree *h, bitree *q)
{
while (h->next && (h->next->weight < q->weight))
{
h = h->next;
}
q->next = h->next;
h->next = q;
return;
}
void VisitList(bitree *h)
{
printf("vist: h = %p\n",h);
printf("vist: h->next = %p\n",h->next);
h = h->next;
while ( h )
{
printf("%d ", h->weight);
h = h->next;
}
printf("\n");
return;
}
void CreateHaffmanTree(bitree *h)
{
bitree *p;
while (h->next && h->next->next)
{
p = (bitree *)malloc(sizeof(bitree));
p->lchild = h->next;
p->rchild = h->next->next;
p->weight = p->lchild->weight + p->rchild->weight;
h->next = p->rchild->next;
InsertList(h, p);
}
return;
}
void NoOrder(bitree *root)
{
bitree *p;
linkqueue *queue;
queue = CreateEmptyLinkqueue();
EnQueue(queue, root);
while ( !EmptyLinkqueue(queue) )
{
p = DeQueue(queue);
if ((p->lchild == NULL) && (p->rchild == NULL))
{
printf("%c[%2d] : %s\n", p->ch, p->weight, p->code);
continue;
}
if (p->lchild)
{
strcpy(p->lchild->code, p->code);
strcat(p->lchild->code, "0");
EnQueue(queue, p->lchild);
}
if (p->rchild)
{
strcpy(p->rchild->code, p->code);
strcat(p->rchild->code, "1");
EnQueue(queue, p->rchild);
}
}
return;
}
int main(int argc, char *argv[])
{
char ch[] = {65,66,67,68,69,70};
int value[] = {10,20,30,40,50,60};
int i;
bitree *h, *p;
int j;
//for(j = 0; j ch = ch[i];
p->weight = value[i];
p->code[0] = '\0';
p->lchild = p->rchild = NULL;
InsertList(h, p);
}
VisitList(h);
CreateHaffmanTree(h);
puts("-------------------");
VisitList(h->next);
printf("h->next = %p\n",h->next);
NoOrder(h->next);
//printf("j = %d\n",j);
}
return 0;
}

哈夫曼树及哈夫曼编码的C程序实现(数据结构题)问题描述〕输入一个有n个叶结点的权值构造一棵哈夫曼树;(例如:n=8,权值为 5 29 7 8 14 23 3 11) 根据哈夫曼树构造哈夫曼编码,用指向字符 请问如何用C语言实现汉字和Unicode编码的转换 求程序 c计算器程序软件设计1,设计一程序,能够实现1~3位数的加减乘除运算.2,实现数据的乘方、对数、指数运算等等. 用C语言设计一个简单计算器程序,能根据键盘输入的运算指令和数据,做简单的加减乘除运算.(1) 基本要求(a) 题目解析及要求:1.要能实现基本的加、减、乘、除运算.2.程序应具有由用户选 C语言程序中,要检测一个数据是否在变化着,应该怎么实现? 哈夫曼编码 c++,输入字符和出现的概率,求输入的数据的Huffman树路径?要求代码!,急 实数编码遗传算法是怎么实现实数编码的? DSP采集的数据怎样传给SCI 程序如何实现的? 实数编码是如何实现的? C语言中如何实现判断闰年的程序? 下列不属于无失真图像压缩编码方法的是:A.游程编码B. 算术编码C. 哈夫曼编码D.卡尔曼编码 1.用c语言编写程序,实现输入10个数,分别求其最大值、最小值及平均数,要求用函数实现. C语言程序设计一个程序,实现求如下数列中第40项的值:1,1,2,3,5,8,13,21,…… .要求程序输出这样的40个数据.帮忙啊……达人们…… 下列关于数据排序的说法中,错误的是( )A.Word2000可以对表格中的数据自动排序B.PowerPoint2000可以对表格中的数据自动排序C.Excel2000实现数据排序简便易行D.编写计算机程序也可以解决数据排序问 用AT89C51单片机实现四位数码管显示数据!用c语言程序实现!例如显示出1234 这四个数. 求SQL语句实现两个库房数据的合并,表结构一样A库 物料编码 数量 001 20 002 30 B库 物料编码 数量 001 110 003 30 合并后001 130002 30003 30将 编写程序,实现两个集合的交运算(用C语言)1、已知两个整数集合中的数据以递增次序分别存放在数组A,B中,编写程序实现两个集合的交运算(即取两个集合相同的数据元素),并把得到的交 C语言:编写程序,输入10个学生的成绩数据,计算并输出平均分及低于平均分的学生的人数.可以用C语言的程序直接写出来的那种!真的是新手!可以将程序打出来吗?很多不懂的!要完整的程序!