C语言哈夫曼编码实验分析报告Word格式.docx

上传人:b****3 文档编号:17546978 上传时间:2022-12-07 格式:DOCX 页数:13 大小:308.21KB
下载 相关 举报
C语言哈夫曼编码实验分析报告Word格式.docx_第1页
第1页 / 共13页
C语言哈夫曼编码实验分析报告Word格式.docx_第2页
第2页 / 共13页
C语言哈夫曼编码实验分析报告Word格式.docx_第3页
第3页 / 共13页
C语言哈夫曼编码实验分析报告Word格式.docx_第4页
第4页 / 共13页
C语言哈夫曼编码实验分析报告Word格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C语言哈夫曼编码实验分析报告Word格式.docx

《C语言哈夫曼编码实验分析报告Word格式.docx》由会员分享,可在线阅读,更多相关《C语言哈夫曼编码实验分析报告Word格式.docx(13页珍藏版)》请在冰豆网上搜索。

C语言哈夫曼编码实验分析报告Word格式.docx

一、要解决的问题

利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。

但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。

对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。

二、算法基本思想描述:

根据给定的字符和其中每个字符的频度,构造哈夫馒树,并输出字符集中每个字符的哈夫曼编码.将给定的字符串根据其哈夫曼编码进行编码,并进行相应的译码.

三、设计

1.数据结构的设计

(1)哈夫曼树的表示

设计哈夫曼树的结构体(htnode),其中包含权重、左右孩子、父母和要编码的字符。

用这个结构体(htnode)定义个哈夫曼数组(hfmt[])。

迷宫定义如下:

typedefstruct

{

intweight;

intlchild;

intrchild;

intparent;

charkey;

}htnode;

typedefhtnodehfmt[MAXLEN];

(2)对原始字符进行编码

初始化哈夫曼树(inithfmt)。

从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树。

并显示出每个字符的编码。

1.voidinithfmt(hfmtt)//对结构体进行初始化

2.voidinputweight(hfmtt)//输入函数

3.voidselectmin(hfmtt,inti,int*p1,int*p2)//选中两个权值最小的函数

4.voidcreathfmt(hfmtt)//创建哈夫曼树的函数

5.voidphfmnode(hfmtt)//对字符进行初始编码

(3)对用户输入的字符进行编码

voidencoding(hfmtt)//对用户输入的电文进行编码

{

charr[1000];

//用来存储输入的字符串

inti,j;

printf("

\n\n请输入需要编码的字符:

"

);

gets(r);

编码结果为:

for(j=0;

r[j]!

='

\0'

;

j++)

for(i=0;

i<

n;

i++)

if(r[j]==t[i].key)

hfmtpath(t,i,j);

\n"

}

(4)对用户输入的字符进行编码

voiddecoding(hfmtt)//对用户输入的密文进行译码

charr[100];

inti,j,len;

j=2*n-2;

//j初始从树的根节点开始

\n\n请输入需要译码的字符串:

len=strlen(r);

译码的结果是:

len;

{

if(r[i]=='

0'

j=t[j].lchild;

if(t[j].lchild==-1)

%c"

t[j].key);

}

}

elseif(r[i]=='

1'

j=t[j].rchild;

if(t[j].rchild==-1)

\n\n"

四、源程序清单:

#include<

stdio.h>

stdlib.h>

string.h>

#defineMAXLEN100

intn;

voidinithfmt(hfmtt)//对结构体进行初始化

inti;

------------------------------------------------------------------\n"

******************************输入区******************************\n"

\n请输入n="

scanf("

%d"

&

n);

getchar();

2*n-1;

i++)//对结构体进行初始化

t[i].weight=0;

t[i].lchild=-1;

t[i].rchild=-1;

t[i].parent=-1;

}

voidinputweight(hfmtt)//输入函数

intw;

//w表示权值

chark;

//k表示获取的字符

{

请输入第%d个字符:

i+1);

k);

t[i].key=k;

请输入第%d个字符的权值:

w);

t[i].weight=w;

voidselectmin(hfmtt,inti,int*p1,int*p2)//选中两个权值最小的函数

longmin1=999999;

longmin2=999999;

intj;

j<

=i;

j++)//选择最小权值字符的下标返回

if(t[j].parent==-1)

if(min1>

t[j].weight)

min1=t[j].weight;

*p1=j;

j++)//选择次小权值字符的下标还回

if(min2>

t[j].weight&

&

j!

=(*p1))//注意j!

=(*p1))

min2=t[j].weight;

*p2=j;

voidcreathfmt(hfmtt)//创建哈夫曼树的函数

inti,p1,p2;

inithfmt(t);

inputweight(t);

for(i=n;

selectmin(t,i-1,&

p1,&

p2);

t[p1].parent=i;

t[p2].parent=i;

t[i].lchild=p1;

t[i].rchild=p2;

t[i].weight=t[p1].weight+t[p2].weight;

voidprinthfmt(hfmtt)//打印哈夫曼树

**********************哈夫曼编数结构:

*****************************\n"

\t\t权重\t父母\t左孩子\t右孩子\t字符\t"

\t\t%d\t%d\t%d\t%d\t%c"

t[i].weight,t[i].parent,t[i].lchild,t[i].rchild,t[i].key);

\n------------------------------------------------------------------\n"

voidhfmtpath(hfmtt,inti,intj)//编码的重要哈夫曼树路径递归算法

inta,b;

a=i;

b=j=t[i].parent;

if(t[j].parent!

=-1)

i=j;

if(t[b].lchild==a)

0"

else

1"

voidphfmnode(hfmtt)//对字符进行初始编码

inti,j,a;

**************************哈夫曼编码******************************"

j=0;

\t\t%c\t"

t[i].key,t[i].weight);

intmain()

hfmtht;

charflag;

|----------------------|\n"

|信管1002--林左权--15号|\n"

|**********************|\n"

|哈夫曼编码课程设计|\n"

|设计完成时间:

2011/6/27|\n"

creathfmt(ht);

printhfmt(ht);

phfmnode(ht);

***************************编码&

译码&

退出***********************"

\n【1】编码\t【2】\t译码\t【0】退出"

\n您的选择:

flag=getchar();

while(flag!

if(flag=='

encoding(ht);

elseif(flag=='

2'

decoding(ht);

您的输入有误,请重新输入。

\n***************************编码&

\n\n-----------------------------------------------------------------\n"

***************欢迎使用林左权的哈夫曼编码系统********************\n"

-----------------------------------------------------------------\n"

system("

pause"

五、测试数据及测试结果:

例如:

六、心得体会:

(略)

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

当前位置:首页 > 初中教育 > 其它课程

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

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