Huffman源程序.doc_第1页
Huffman源程序.doc_第2页
Huffman源程序.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include#include#include#define error 0#define ok 1typedef struct unsigned int weight; unsigned int parent,lchild,rchild;htnode,*huffmantree;typedef char*huffmancode;int n,s1,s2;void select(huffmantree &ht,int n,int &s1,int &s2) int i=1; while(hti.parent!=0) i+; s1=i; i+; while(hti.parent!=0) i+; s2=i; for(;i=n;i+) if(hti.parent=0) if(hti.weighthts1.weight) s2=s1; s1=i; else if(hti.weighthts2.weight) s2=i; void huffmancoding(huffmantree &ht,huffmancode &hc, int *w,int n) int c,m,f,i,start; char *cd; if(n=1) return; m=2*n-1; ht=(huffmantree)malloc(m+1)*sizeof(htnode); /0单元未用 huffmantree p=ht+1; /w+; for(i=1;iweight=*w; p-parent=0; p-rchild=0; p-lchild=0; for(;iweight=0; p-parent=0; p-rchild=0; p-lchild=0; for(i=n+1;i=m;i+) /建huffman树(从叶子后开始存内结点) select(ht,i-1,s1,s2); /在ht1i-1选择 hts1.parent=i; hts2.parent=i; hti.lchild=s1; hti.rchild=s2; hti.weight=hts1.weight+ hts2.weight; hc=(huffmancode)malloc(n+1)*sizeof(char*); /分配n个字符编码的头指针向量 cd=(char*) malloc(n*sizeof(char); /分配求编码的工作空间(n) cdn-1=0; /编码结束符(从cd0cdn-1为合法空间) for(i=1;i=n;+i) start=n-1; /编码结束符位置 for(c=i,f=hti.parent;f!=0;c=f,f=htf.parent)/从叶子到根逆向求编码 if(htf.lchild=c) cd-start=0; else cd-start=1; /c=f; hci=(char *)malloc(n-start)*sizeof(char);/为第i个字符编码分配空间 strcpy(hci,&cdstart); free(cd); for(i=1;i=m;i+) printf(%d %d %d %d %dn,i,hti.weight,hti.parent,hti.lchild,hti.rchild); system(pause); /huffmancodingint main() int *w,i; huffmantree ht; huffmancode hc; printf(output:n); printf(请输入叶子节点数:n); scanf(%d,&n); w=(int *)malloc(n*sizeof(int); hc=(huffmancode)malloc(n*sizeof(huffmancode); printf(请输入各叶子节点的权数:n); for(i=1;i=n;i+) scanf(%d,&wi-1); huffmancoding(ht,hc,w,n); printf(输出编码结果:n); /s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论