参考文档哈夫曼编码器word范文模板 14页.docx

上传人:b****5 文档编号:8485450 上传时间:2023-01-31 格式:DOCX 页数:11 大小:19.31KB
下载 相关 举报
参考文档哈夫曼编码器word范文模板 14页.docx_第1页
第1页 / 共11页
参考文档哈夫曼编码器word范文模板 14页.docx_第2页
第2页 / 共11页
参考文档哈夫曼编码器word范文模板 14页.docx_第3页
第3页 / 共11页
参考文档哈夫曼编码器word范文模板 14页.docx_第4页
第4页 / 共11页
参考文档哈夫曼编码器word范文模板 14页.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

参考文档哈夫曼编码器word范文模板 14页.docx

《参考文档哈夫曼编码器word范文模板 14页.docx》由会员分享,可在线阅读,更多相关《参考文档哈夫曼编码器word范文模板 14页.docx(11页珍藏版)》请在冰豆网上搜索。

参考文档哈夫曼编码器word范文模板 14页.docx

参考文档哈夫曼编码器word范文模板14页

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!

==本文为word格式,下载后可方便编辑和修改!

==

哈夫曼编码器

篇一:

哈夫曼编码器-源代码

#include

#include

#include

typedefstruct{

chardata;

intweight;

intparent;

intlchild;

intrchild;

}HTNode;

HTNodeht[30];

typedefstruct{

charcd[30];

intstart;

}HCode;

HCodehcd[30];

voidCreateHT(HTNodeht[],intn){

inti,k,lnode,rnode;

intmin1,min2;

for(i=0;i<2*n-1;i++)

{

ht[i].parent=ht[i].lchild=ht[i].rchild=0;

}

for(i=n;i<2*n-1;i++)

{

min1=min2=32767;

lnode=rnode=0;

for(k=0;k<=i-1;k++)

if(ht[k].parent==0)

if(ht[k].weight

{

min2=min1;

min1=ht[k].weight;

rnode=lnode;

lnode=k;

}

elseif(ht[k].weight

{

min2=ht[k].weight;

rnode=k;

}

}

{

ht[lnode].parent=i;ht[rnode].parent=i;ht[i].weight=ht[lnode].weight+ht[rnode].weight;ht[i].lchild=lnode;ht[i].rchild=rnode;}}voidCreateHCode(HTNodeht[],HCodehcd[],intn){inti,f,c;HCodehc;for(i=0;i

=0){if(ht[f].lchild==c){hc.cd[hc.start--]='0';}else{hc.cd[hc.start--]='1';}c=f;f=ht[f].parent;}hc.start++;hcd[i]=hc;}}voidCodeInput(intn,HTNodeht[]){inti;charch[30];scanf("%s",ch);for(i=0;i

{inti,j;printf("所有字符的哈弗曼编码为:

");

for(i=0;i

{

for(j=hcd[i].start;j<=n;j++)

{

printf("%lc",hcd[i].cd[j]);

}

}

printf("\n");

for(i=0;i

{

printf("序号%d:

",i);

for(j=hcd[i].start;j<=n;j++)

{

printf("%lc",hcd[i].cd[j]);

}

printf("\n");

}

}

voidsave(intn)

{

inti;

FILE*fp;

if((fp=fopen("c:

\\data.txt","w"))==NULL

{

printf("can'topenthisfile!

!

!

");

exit(0);

}

else{

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

{

fprintf(fp,"%ld",ht[i].weight);

}

printf("Youhavesaveditsuccessful!

!

!

");

}

fclose(fp);

}

voidmain()

{intnum;

charflag='y';

while(flag=='y'||flag=='Y')

{

system("cls");

printf("################################\n");

printf("欢迎使用哈夫曼编码系统\n");

printf("################################\n");

printf("########1.生成哈夫曼树#########\n");

printf("#########2.哈夫曼编码#########\n");

printf("#########3.哈夫曼权值存储#########\n");

printf("########4.退出########\n");

printf("##############################\n");

printf("请选择操作类型(1-4):

");

scanf("%d",&num);

printf("############################################\n");

switch(num)

{

case1:

intn,i;

printf("请输入要输入的字符数量n为:

");

if((scanf("%ld",&n))&&(n!

=0))

{

printf("\n请输入%d个字符和%d个对应权值<先将所有字符输入再输对应权值>\n在此输入:

",n,n);

CodeInput(n,ht);

CreateHT(ht,n);

printf("对应的权值为:

\n");

for(i=0;i

{

printf("%d:

%ld",i,ht[i].weight);

if((i+1)%4==0){

printf("\n");

}

}

}

printf("\n######################################-\n");break;

case2:

CreateHCode(ht,hcd,n);

CodeOutput(n,hcd);

printf("##############################################-");break;

case3:

save(n);

}printf("#######################################");break;case4:

printf("#############**感谢使用本程序**###############\n");exit

(1);printf("########################################");break;default:

printf("Error!

Youmustputthenumberbetween<1--4>");printf("\n#####################################\n");}printf("\n继续或退出(yorn):

");getchar();flag=getchar();}

篇二:

哈夫曼编码器的实现

课程设计实验报告

------哈夫曼编码器的实现

系别:

电技电信班级:

姓名:

学号:

一、课程设计名称:

哈夫曼编码器二、使用工具软件:

MicrosoftvisualC++三、课程设计内容简介

(1)源程序

#include#include#include#defineMAX99

charcha[MAX],str[MAX];charhc[MAX-1][MAX];

ints1,s2;//设置全局变量,以便在select(函数)中返回两个变量

typedefstruct//huffman树存储结构{

unsignedintweight;//权值字符出现的频率intlchild,rchild,parent;}huftree;

voidselect(huftreetree[],intk)//找寻parent为0,权最小的两个节点

{

inti;

for(i=1;i<=k&&tree[i].parent!

=0;i++);s1=i;for(i=1;i<=k;i++)

if(tree[i].parent==0&&tree[i].weight

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

if(tree[i].parent==0&&i!

=s1)break;s2=i;for(i=1;i<=k;i++)if(tree[i].parent==0&&i!

=s1&&

tree[i].weight

}

voidhuffman(huftreetree[],int*w,intn)//生成huffman树{intm,i;

if(n<=1)return;m=2*n-1;

for(i=1;i<=n;i++)//将各个字符的频率权值作为森林中的每一棵子树

{tree[i].weight=w[i];tree[i].parent=0;tree[i].lchild=0;tree[i].rchild=0;}for(i=n+1;i<=m;i++)

{tree[i].weight=0;tree[i].parent=0;tree[i].lchild=0;tree[i].rchild=0;}for(i=n+1;i<=m;i++){select(tree,i-1);

tree[s1].parent=i;tree[s2].parent=i;tree[i].lchild=s1;

tree[i].rchild=s2;

tree[i].weight=tree[s1].weight+tree[s2].weight;}}

voidhuffmancode(huftreetree[],charcode[],intn)//标记哈夫曼编码

{

intstart,c,i,f;code[n-1]='\0';

cout<<"各字符的哈夫曼编码为:

"<

{start=n-1;

for(c=i,f=tree[i].parent;f!

=0;c=f,f=tree[f].parent){if(tree[f].lchild==c)code[--start]='0';elsecode[--start]='1';}strcpy(hc[i],&code[start]);

cout<

"<

voidtohuffmancode(intn)//将您从键盘上输入的字符转变为对应的哈夫曼编码

{

inti=0,j;

cout<

"<

for(;str[i]!

='\0';i++){

j=0;

for(;str[i]!

=cha[j]&&j<=n;)j++;if(j<=n)cout<

cout<

voiddecode(charch[],huftreetree[],intn)//根据输入的01代码按所得的哈夫曼编码箅到对应的字符

{

inti,j,m;charb;m=2*n-1;i=m;

cout<<"请输入二进值数:

"<>b;

cout<<"解码后的字符串为:

"<

='\n')//遇到回车时,结束

{if(b=='0')i=tree[i].lchild;//按输入的二进制码填入对应的哈夫曼树中,从而得到对应的编码

elseif(b=='1')i=tree[i].rchild;else

{cout<<"输入的值非法,请重新输入:

if(tree[i].lchild==0){cout<

L:

cin>>b;}

if(tree[j].lchild!

=0)

cout<

voidmain()

{system("color5e");inti=0,j=1,n;

int*w,weight[MAX],st[199]={0};charcode[MAX];huftreetree[MAX];w=weight;

cout<<"******"<

***"<

篇三:

数据结构课程设计:

哈夫曼编码器

摘要

哈夫曼(huffman)树是一种带权路径长度最小的二叉树,也称最优二叉树,它有着极为广泛的应用。

而我今天做的课程设计就是其中的一个应用---哈夫曼编码器。

其实它的思想很简单,显示根据输入的权值建立一棵哈夫曼树,然后根据哈夫曼数求出各个叶结点的编码。

这样就构成了一个最简单的哈夫曼编码器。

关键词:

哈夫曼树编码器最优二叉树带权路径长度

1课题分析.....................................................................................................................................................1

1.1设计目的.........................................................................................................................................1

1.2设计要求.........................................................................................................................................1

1.3设计内容..........................................................................................................................................1

2总体设计与分析.......................................................................................................................................3

2.1功能函数设计................................................................................................................................3

2.1.1建立哈夫曼树......................................................................................................................3

2.2.2求哈夫曼编码函数..............................................................................................................3

2.2.3打印编码函数......................................................................................................................3

3程序说明.....................................................................................................................................................4

3.1结构图.............................................................................................................................................4

4程序调试.....................................................................................................................................................5

4.1菜单.................................................................................................................................................5

4.2输入叶结点和权值.........................................................................................................................6

4.3输出哈夫曼编码..............................................................................................................................7

5设计问题.....................................................................................................................................................8

5.1存入文件..........................................................................................................................................8

5.1.1问题1...................................................................................................................................8

5.1.2问题2...................................................................................................................................8

6小结.............................................................................................................................................................9

参考文献.......................................................................................................................................................10

源代码...........................................................................................................................................................11

1课题分析

在当今信息爆炸时代,如何采用有效的数据压缩技术节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视,哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。

哈夫曼编码是一种编码方式,以哈夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。

哈夫曼编码使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。

这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。

赫夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。

树中从根到每个叶子都有一条路径,对路径上的各分支约定:

指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1