数据结构课程设计--哈夫曼编码(3)

2019-01-12 10:40

3.main函数

开始 调用CreateHT函数, 构造haffman树 调用CreateHCode函数, 生成haffman编码 输入str1[]; 存在相应代码串 N Y 结束 译码 Y flag=0 N 图4.main函数流程图

第5页 共21页

4. CreateHCode函数

开始 hc.start=n;c=i; f=ht[i].parent; ht[f].lchild=c Y ht[f].cd[hc.start--]=’0’; N ht[f].cd[hc.start--]=’1’; Y f!=-1 N hc.start++; hcd[i]=hc; i

第6页 共21页

3.各模块的类C码算法

1)编码模块:

首先通过键盘输入需要键盘的字符串,调用countstr()函数统计并储存字符频度,再调用函数:

void CreateHT(HTNode ht[],int n) //构造哈弗曼树 {

int i,j,k,lnode,rnode;

double min1,min2; //分别存放lnode和rnode的两个结点位置 使所有结点的相关域置-1 for(i=n;i<2*n-1;i++) { } }

再调用:

void CreateHCode(HTNode ht[],HCode hcd[],int n) {

for(i=0;i

hc.start=n; c=i;

f=ht[i].parent;

若ht[i]为ht[f]的左孩子结点,则

hc.cd[hc.start--]='0';

先寻找权值最小结点,使其成为左右孩子结点; 再求出权值为左右孩子结点权值之和的h[i]结点; 使ht[i]作为双亲结点;

若ht[i]为ht[f]的右孩子结点,则

hc.cd[hc.start--]='1';

再对ht[f]进行同样的判断,直至f=-1 hc.start++;

第7页 共21页

} }

hcd[i]=hc;

2)译码模块:

先通过键盘输入哈夫曼编码代码串,再调用:

int ReadCode(char str1[],HCode hcd[],HTNode ht[],int MAX,int n) //译码函数 {

int i,j,m=0,k;

int flag=1; //flag为1则哈弗曼编码

输入合法

char temp[30]=\

for(i=0;str1[i]!='\\0';i++,m++) //进行译码 { }

第8页 共21页

temp[m]=str1[i]; for(j=0;j

若找到对应编码 {

printf(\for(k=0;k<30;k++)

temp[k]='\\0';

m=-1; 终止循环;

}

四. 调试分析以及设计体会

1.测试数据:

准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果: 输入:

图6.编码输入演示图

输出:

图7.编码输出演示图

正确输入哈夫曼编码代号:

图8.正确译码输入演示图

输出:

图9.正确输入译码译码结果输出演示图

第9页

共21页


数据结构课程设计--哈夫曼编码(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:二语文下册第五单元讲评课

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: