当前位置: 代码迷 >> C语言 >> 急求huffman编解码程序!!
  详细解决方案

急求huffman编解码程序!!

热度:269   发布时间:2005-05-16 22:23:00.0
急求huffman编解码程序!!
急求huffman编解码程序!! 那为大侠给提供一个huffman编码和解码程序啊 我明天就要交做业了! 根据字符出现的频率输出二进制编码 根据二进制串输出字符 typedef struct { char data; int weight; int parent; int left; int right; } huffnode; 树是这样定义的! 高手们帮帮忙啊!!!!
搜索更多相关的解决方案: huffman  解码  

----------------解决方案--------------------------------------------------------
我业好啊
----------------解决方案--------------------------------------------------------
我也要啊
----------------解决方案--------------------------------------------------------
要看看
----------------解决方案--------------------------------------------------------
楼主是哪个学校的????这个不难做的,关键的算法书上有,其它的输入输出是小事。还是自己多想想吧。

这个我做好了,也是课程设计,在上交以前我无法给跟我一个学校的。
有空我可以给你意见,考试很忙!
----------------解决方案--------------------------------------------------------

#include<stdio.h> #include<iostream.h> #define n 5 #define m 2*n-1 #define MAX 998 typedef struct { float weight; char c; int lchild,rchild,parent; }hufmtree;//建立哈夫曼树结构

typedef struct { char bits[n]; int start; char ch; }codetype;//建立编码结构 hufmtree tree[m+1];//零下标不用 codetype code[n+1];

//输入字符、编码及构建哈夫曼树函数 void HuffManTree(hufmtree tree[]) { int i,j,p1,p2; char c; float small1,small2,f; for(i=1;i<=m;i++) { tree[i].parent=0; tree[i].lchild=0; tree[i].rchild=0; tree[i].weight=0.0; tree[i].c='\0'; } printf("请输入要编码的字符:"); for(i=1;i<=n;i++) { c=getchar(); tree[i].c=c; } cout<<"请输入相应字符的权值:"; for(i=1;i<=n;i++) { cin>>f; tree[i].weight=f; } for(i=n+1;i<=m;i++) { p1=0; p2=0; small1=MAX; small2=MAX; for(j=1;j<=i-1;j++) if(tree[j].parent==0) if(tree[j].weight<small1) { small2=small1; small1=tree[j].weight; p2=p1; p1=j; } else if(tree[j].weight<small2) { small2=tree[j].weight; p2=j; } tree[p1].parent=i; tree[p2].parent=i; tree[i].lchild=p1; tree[i].rchild=p2; tree[i].weight=tree[p1].weight+tree[p2].weight; } } //为字符编码函数 void HuffManCode(hufmtree tree[],codetype code[]) { int i,j,c,p; codetype cd; for(i=1;i<=n;i++) { cd.start=n; c=i; cd.ch=tree[i].c; p=tree[i].parent; for(j=0;j<n;j++) cd.bits[j]=' '; while(p!=0) { cd.start--; if(tree[p].lchild==c) cd.bits[cd.start]='0'; else cd.bits[cd.start]='1'; c=p; p=tree[p].parent; } code[i]=cd; } } //编码输出函数 void PutoutCode(codetype code[]) { int i,j; for(i=1;i<=n;i++) { cout<<code[i].ch<<" "; for(j=0;j<n;j++) cout<<code[i].bits[j]; cout<<endl; } } void main() { HuffManTree(tree); HuffManCode(tree,code); cout<<"字符编码结果为:"<<endl; PutoutCode(code); }


----------------解决方案--------------------------------------------------------
不知对你有没有帮助
----------------解决方案--------------------------------------------------------