云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 哈夫曼编译码器课程设计报告(完整版)

哈夫曼编译码器课程设计报告(完整版)

  • 62 次阅读
  • 3 次下载
  • 2025/5/1 19:03:27

}

//建立赫夫曼树的算法

void HuffmanCoding(HuffmanTree &HT,char *character,int *w,int n) {

int m,i,x,y; HuffmanTree p; if(n<=1) return; m=2*n-1;

HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); for(p=HT+1,i=1;i<=n;++i,++p,++character,++w)

{p->ch=*character;p->weight=*w;p->parent=0;p->lchild=0;p->rchild=0;}

for(;i<=m;++i,++p)

{p->ch=0;p->weight=0;p->parent=0;p->lchild=0;p->rchild=0;} for(i=n+1;i<=m;++i) {

select(HT,i-1,&x,&y);

HT[x].parent=i;HT[y].parent=i; HT[i].lchild=x;HT[i].rchild=y;

HT[i].weight=HT[x].weight+HT[y].weight; } }

//从HT[1]到HT[j]中选择parent为0,weight最小的两个结点,用x和y返回其序号

void select(HuffmanTree HT,int j,int *x,int *y)

9

{ int i;

//查找weight最小的结点 for (i=1;i<=j;i++) if (HT[i].parent==0) {*x=i;break;} for (;i<=j;i++)

if ((HT[i].parent==0)&&(HT[i].weight

HT[*x].parent=1; //查找weight次小的结点 for (i=1;i<=j;i++) if (HT[i].parent==0) {*y=i;break;} for (;i<=j;i++)

if ((HT[i].parent==0)&&(i!=*x)&&(HT[i].weight

//对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中 void Coding() {

FILE *fp,*fw; int i,f,c,start; char *cd; HuffmanCode HC; if(n==0)

10

n=Read_tree(HT);//从文件hfmtree.txt中读入赫夫曼树,返回叶子结点数

//求赫夫曼树中各叶子节点的字符对应的的编码,并存于HC指向的空间中 {

HC=(HuffmanCode)malloc((n+1)*sizeof(char*)); 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)); strcpy(HC[i],&cd[start]); } free(cd); }

if((fp=fopen(\ printf(\if((fw=fopen(\ printf(\char temp;

fscanf(fp,\从文件读入第一个字符 while(!feof(fp))

11

{

for(i=1;i<=n;i++)

if(HT[i].ch==temp) break; //在赫夫曼树中查找字符所在的位置 for(int r=0;HC[i][r]!='\\0';r++) //将字符对应的编码存入文件 fputc(HC[i][r],fw);

fscanf(fp,\从文件读入下一个字符 }

fclose(fw); fclose(fp);

printf(\已将文件hfmtree.txt成功编码,并已存入codefile.txt中!\\n\\n\}

//将文件codefile中的代码进行译码,结果存入文件textfile中 void Decoding() {

FILE *fp,*fw; int m,i;

char *code,*text,*p;

if(n==0)

n=Read_tree(HT);//从文件hfmtree.txt中读入赫夫曼树,返回叶子结点数

if((fp=fopen(\ printf(\ if((fw=fopen(\

12

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

} //建立赫夫曼树的算法 void HuffmanCoding(HuffmanTree &HT,char *character,int *w,int n) { int m,i,x,y; HuffmanTree p; if(n<=1) return; m=2*n-1; HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); for(p=HT+1,i=1;i<=n;++i,++p,++character,++w) {p->ch=*character;p->weight=*w;p->parent=0;p->lchild=0;p->rchild=0;} for(;i<=m;++i,++p) {p->ch=0;p->weight=0;p->parent=0;

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com