哈夫曼编码解码的实验报告Word格式文档下载.docx

上传人:b****6 文档编号:19780141 上传时间:2023-01-10 格式:DOCX 页数:8 大小:15.95KB
下载 相关 举报
哈夫曼编码解码的实验报告Word格式文档下载.docx_第1页
第1页 / 共8页
哈夫曼编码解码的实验报告Word格式文档下载.docx_第2页
第2页 / 共8页
哈夫曼编码解码的实验报告Word格式文档下载.docx_第3页
第3页 / 共8页
哈夫曼编码解码的实验报告Word格式文档下载.docx_第4页
第4页 / 共8页
哈夫曼编码解码的实验报告Word格式文档下载.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

哈夫曼编码解码的实验报告Word格式文档下载.docx

《哈夫曼编码解码的实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《哈夫曼编码解码的实验报告Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。

哈夫曼编码解码的实验报告Word格式文档下载.docx

//定义哈夫曼编码的存储结构

charbit[MAX];

intstart;

}HuffCode;

HuffNodeht[2*MAX];

HuffCodehcd[MAX];

intCoun[127]={0};

intn;

chars1[200000];

chartext[5000];

//构造哈夫曼树

voidHuffmanTree()

inti,j,k,left,right,min1,min2;

//printf("

输入叶子的节点数:

"

);

//scanf("

%d"

&

n);

printf("

字符数量=%d\n"

n);

for(i=1;

i<

=2*n-1;

i++)

ht[i].parent=ht[i].lch=ht[i].rch=0;

}

j=0;

for(i=1;

=n;

/*getchar();

输入第%d个叶子节点的值:

i);

scanf("

%c"

ht[i].data);

输入该节点的权值:

scanf("

ht[i].weight);

*/

for(;

j<

127;

j++)

if(Coun[j]!

=0)

ht[i].data=j;

ht[i].data);

Word文档ht[i].weight=Coun[j];

ht[i].weight);

break;

j++;

\n"

for(i=n+1;

{//在前n个结点中选取权值最小的两个结点构成一颗

二叉树

min1=min2=10000;

//为min1和min2设置一个比所有权值都大的值

left=right=0;

for(k=1;

k<

=i-1;

k++)

if(ht[k].parent==0)//若是根结点

//令min1和min2为最小的两个权值,left和right为权值最小的两个结点位置if(ht[k].weight<

min1)

min2=min1;

right=left;

min1=ht[k].weight;

left=k;

elseif(ht[k].weight<

min2)

min2=ht[k].weight;

right=k;

ht[left].parent=i;

ht[right].parent=i;

ht[i].weight=ht[left].weight+ht[right].weight;

ht[i].lch=left;

ht[i].rch=right;

//构造哈夫曼编码

voidHuffmanCode()

inti,c,k,f;

HuffCodecd;

cd.start=n;

c=i;

f=ht[i].parent;

while(f!

{if(ht[f].lch==c)

cd.bit[cd.start]='

0'

;

else

1'

cd.start--;

c=f;

f=ht[f].parent;

}hcd[i]=cd;

输出哈夫曼编码:

\n"

%c:

"

for(k=hcd[i].start+1;

hcd[i].bit[k]);

printf("

//对字母进行编码

voidCode()//将字符与相应的哈夫曼编码进行匹配,输出编码结果

inti=0,j,k,h=0;

while(text[i]!

='

\0'

for(j=1;

if(text[i]==ht[j].data)

for(k=hcd[j].start+1;

s1[h]=hcd[j].bit[k];

h++;

i++;

编码\n"

//puts(s1);

//解码

voidHuffmanDecode()

解码\n"

intlen,i,f;

charC;

//charS[MAXCODE];

%s"

S);

//使用gets()直接跳过len=strlen(s1);

s1:

%d\n"

len);

f=2*n-1;

for(i=0;

len;

if(s1[i]=='

f=ht[f].lch;

if(ht[f].lch==0&

&

ht[f].rch==0)

C=ht[f].data;

C);

elseif(s1[i]=='

f=ht[f].rch;

f=2*n-1;

//统计字母个数及其权值

voidCount()

inti,j,m;

Word文档n=0;

i=0;

请仅输入小写字母\n"

//例程本省存在一个BUG,只输入一个字母不能进行编码(并未解决)

s);

)//使用ASCII码表进行统计

m=text[i];

m);

Coun[m]++;

for(j=0;

n++;

//markCode

voidmain()

intl=0;

FILE*fp;

fp=fopen("

text.txt"

"

r"

if(fp==NULL)

文件打开失败\n"

while

(1);

while(!

feof(fp))

text[l]=fgetc(fp);

l++;

输入文本\n"

%s\n"

text);

fclose(fp);

Count();

HuffmanTree();

HuffmanCode();

Code();

HuffmanDecode();

文本文件

文本输入

 

进行哈夫曼编码

对文本进行编码

输出解码结果

3.实验总结

通过本次实验,对二叉树的应用有了相应的了解,掌握了如何构造哈夫曼编码,如何对编码结果进行解码。

最重要的是学会了如何思考着去解决问题,以及代码的调试。

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

当前位置:首页 > 工程科技 > 纺织轻工业

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

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