第十周项目实践 哈夫曼树的建立&&哈夫曼编码
来源:互联网 发布:淘宝二手镜头可以用吗 编辑:程序博客网 时间:2024/06/07 00:49
typedef struct{ char date; int lchild,rchild; int parent;}HTnode;void CreateHTnode(HTnode ht[],int n){ int min1,min2,lnode,rnode; for(int i=0;i<2*n-1;++i)//所有节点的相关值置为-1 { ht[i].prent=ht[i].lchild=ht[i].rchild-1; } for(int i=n;i<2*n-1;++i)//构造哈夫曼树 { min1=min2=inf; lnode=rnode=-1;//代表2个最小权重的节点位置 for(int j=0;j<i;++j)//在【0,i)中寻找最小权重的节点 { if(ht[j].praent=-1)//在先前尚未找过的节点中进行查找 { if(ht[j].date<min1)//判断是否是左节点 { min2=min1,rnode=lnode; min1=ht[j].date,lnode=j; } else if(ht[j].date<min2)//判断是否是右节点。基于思想,不能写成else 也不能写成if { min2=ht[j].date,rnode=j; } } } //双亲节点的处理: ht[i].date=ht[lnode].date+ht[rnode].date; ht[i].lchild=lnode,ht[i].rchild=rnode; ht[lnode].parent=ht[rnode].parent=i; }}数据结构李春葆第五版P239哈夫曼编码:typedef struct{ char cd[N];//存放当前节点的哈夫曼吗 int start;//表示cd[start...n0]部分是哈夫曼码 //因为哈夫曼树中每个叶子节点的哈夫曼编码长度不同,为此采用HCode类型的变量的cd[start..n0]存放当前结点的哈夫曼码}HCode;void createHCode(HTNode ht[],Hcode hcd[],int n0){ Hcode hc; int c,f; for(int i=0;i<n0;++i)//根据哈夫曼树求哈夫曼码 { hc.start=n0,c=i; f=ht[i].parent; while(f!=-1)//直到循环到无双亲节点,即到达根节点 { if(ht[f].lchild==c)//当前节点是双亲节点的左孩子 hc.cd[hc.start--]='0'; else hc.cd[hc.start--]='1';//右孩子 c=f,f=ht[f].parent;//反复进行同样的操作 } hc.start++;//start指向哈夫曼树编码的最开始的字符 hcd[i]=hc; }}
阅读全文
0 0
- 第十周项目实践 哈夫曼树的建立&&哈夫曼编码
- 第十一周上机实践—项目1(4)—哈夫曼编码的算法验证
- 第十一周实践项目1—验证算法(4)哈夫曼编码的算法验证
- 第十周 项目4-哈夫曼编码的算法验证
- 第十周项目4哈夫曼编码的算法验证
- 第十周第十一周上机实践项目-项目2-1-储存班长信息的学生类
- 第十周第十一周上机实践项目-项目2-2-储存班长信息的学生类
- 第十周第十一周上机实践项目项目2-储存班长信息的学生类(2)
- 第十周实践项目~二叉树遍历的递归算法
- 第十一周项目4哈夫曼编码的算法验证
- 第十一周项目1哈夫曼编码的算法验证
- 第十周【项目一哈夫曼编码的算法验证】(4)
- 第十周项目1(4)---哈夫曼编码的算法验证
- 第十周项目1(4)-哈夫曼编码的算法验证
- 第十周 项目4 — (4)哈夫曼编码的验证
- 第十周项目一验证算法 哈夫曼编码的算法验证(4)
- 第八周实践项目~建立顺序串的算法库
- 第十周上机实践项目一
- Address already in use: JVM_Bind<null>:80 解决方案
- 06-python中高级数据类型
- Fly拦截全局Ajax请求
- Android常用设计模式——观察者模式
- 音乐 和视频播放
- 第十周项目实践 哈夫曼树的建立&&哈夫曼编码
- 如何让外网访问本地WampServer站点
- 1
- SAP业务蓝图该怎么做
- redhat7静默安装oracle11gR2
- android 常用权限和依赖
- 2017 CCPC西安总结
- Android PopupWindow用法(四) 无法捕捉视图的原因
- mysql复制基础