永发信息网

赫夫曼输入和建立

答案:1  悬赏:30  手机版
解决时间 2021-08-02 05:06
赫夫曼输入和建立
最佳答案

Typedef struct{
unsigned int weight;
unsigned int parent, lchild, rchild;
}HTNode, *HuffmanTree;
//动态分配数组存储赫夫曼编码表
Typedef char **HuffmanCode;
//动态分配数组存储赫夫曼编码表
Void HuffmanCoding ( HuffmanTree &HT, HuffmanCode &HC, int *w, int n){//w存放n个字符的权值,构造赫夫曼树HT,求赫夫曼编码HC
if(n<=1) return;
m=2*n-1;//结点总数
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//0号单元未用
for(p=HT,i=1; i<=n; ++i,++p,++w) *p={*w,0,0,0};
for( ;i<=m; ++i, ++p) *p={0,0,0,0};
for(i=n+1;i<=m;++i){//建赫夫曼树
Select(HT,i-1,s1,s2);
//在HT[1..i-1]选择parent为0且weight最小的两个结点,其序号分别为s1和s2
HT[s1].parent=i;HT[s2].parent=i;
HT[i].lchild=s1;HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}
HC=(HuffmanCode)malloc((n+1)*sizeof(char*));
//分配n个字符编码的头指针向量
cd=(char*)malloc(n*sizeof(char));//分配求编码的工作空间
cd[n-1]=“\0”;//编码结束符
for(i=1;i<=n;++i){//逐个字符求赫夫曼编码
Start=n-1;//编码结束符位置
For(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)
//从叶子到根逆向求编码
if (HT[f].lchild==c) cd[--start]=“0”;
else cd[--start]=“1”;
HC[i]=(char *)malloc((n-start)*sizeof(char));
//为第i个字符编码分配空间
Strcpy(HC[i],&cd[start]);//从cd复制编码到HC
}
free(cd);//释放工作空间}//HuffmanCoding



HC=(HuffmanCode)malloc((n+1)*sizeof(char*));
P=m; cdlen=0;
for(i=1;i<=m;++i) HT[i].weight=0 ;
//遍历赫夫曼树时用作结点状态标志
While(p){
If(HT[p].weight==0)
{//向左
HT[p].weight=1;
If(HT[p].lchild!=0){p=HT[p].lchild; cd[cdlen++]=“0”;}
Else if(HT[p].rchild==0){
HC[p]=(char *)malloc((cdlen+1)*sizeof(char));
Cd[cdlen]=“\0”;strcpy(HC[p],cd); //复制编码
}
}// 向左
Else if (HT[p].weight==1)
{ //向右
HT[p].weight=2;
If(HT[p].rchild!=0){p=HT[p].rchild; cd[cdlen++]=“1”;}
}
Else
{ //HT[p].weight==2,退回
HT[p].weight=0; p=HT[p].parent; --cdlen;
//退回父结点,编码长度减1
}//else
}//while


我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
节约用水的作文四百字,节约用水的作文400字
平桥区信阳家常菜哪位知道具体地址啊
急:请问谁知道重庆哪有旧枕木出售?
道外区哈尔滨六一幼儿园地址在哪,我要去那里
天下贰 魍魉
鼠标在网页不能复制
从苏州坐火车的卧铺票价是多少钱多少小时到汉
我的电脑为什么会突然玩到一半会自己关掉?(
用西瓜皮来敷脸有什么效果?
用比值或根值法判断下列级数收敛性.
汝州市平顶山红黄蓝童装地址是什么,有没有知
DNF的血气分流技能有什么用狂战有必要学吗
2010大同大学的通知书多会儿发?
FR打书!高手来!!
一亩地,高5米,有多少立方米啊?
推荐资讯
linux 下蓝牙耳机配置过程?
襄城区襄樊幸福花屋在哪里啊,我有事要去这里
沙市区湖北省荆州市沙市区民政局在什么地方啊
荆州区荆州外国语学校地址在哪里啊
岳麓区长沙岳麓区龚世杰诊所地址在什么地方,
蒸湘区衡阳衡钢1号在哪里啊,我有事要去这里
秭归县宜昌秭归读者服务中心在什么地方啊,我
沙市区荆州星期8小镇在哪里啊,我有事要去这
谷城县襄樊庙滩镇自来水缴费大厅这个地址怎么
咋这个整 啊!! 诛仙2
联想Y450A 如何?
电脑主机的灯突然熄灭不工作导致显示器卡屏是
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?