电文编码译码(哈夫曼树)课设报告(2)

2020-04-14 07:08

}

}

if (ht[k].weight

min2=min1;rnode=lnode; min1=ht[k].weight;lnode=k;

}

else if (ht[k].weight

min2=ht[k].weight; rnode=k;

}

}

} ht[lnode].parent=i;

ht[rnode].parent=i; //两个最小节点的父节点是i ht[i].weight=ht[lnode].weight+ht[rnode].weight; //两个最小节点的ht[i].lchild=lnode;ht[i].rchild=rnode; //父节点的左节点

父节点权值是两个最小的节点权值之和 和右节点

3.2 哈夫曼编码

voidCreateHCode(HTNodeht[],HCodehcd[],int n) {

inti,p,c; HCodehc;

for (i=0;i

hc.start=n; //初始位置

c=i; //从叶子结点ht[i]开始往哈夫曼树的根节点上溯 p=ht[i].parent;

while (p!=0) //循序一直到树根结点结束循环 {

hc.cd[hc.start--]=(ht[p].lchild)==c?'0':'1'; //节点

1 的左孩子记为0,右孩子记为1

}

}

c=p;

p=ht[p].parent; //与上面一句

c=i;p=ht[i].parent意思相同,用来促进循环

}

hc.start++; //start指向哈夫曼编码hcd[i]=hc;

hc.cd[]中最开始的字符

void outputHCode(HTNodeht[],HCodehcd[],int n) //输出哈夫曼编码的列表 { }

void editHCode(HTNodeht[],HCodehcd[],intn,charstr[]) //编码函数 {

inti,j,k;

printf(\输出编码结果:\\n\

for (i=0;i

for (j=0;j

if(str[i]==ht[j].data) //在数组中循环查找与输入字符相{

inti,k;

printf(\ 输出哈夫曼编码:\\n\

for (i=0;i

printf(\ %c:\\t\

for (k=hcd[i].start;k<=n;k++) //输出所有data数组{

printf(\ //从最开始的字符起

数据,

中所有数据的编码

输出编码

} printf(\

同的编号,如果相同的就输出这个字符的编码

}

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

printf(\ }

break; //输出完成后跳出当前for循环

} printf(\

3.4哈夫曼译码

void deHCode(HTNodeht[],HCodehcd[],intn,charstr[]) //译码函数 {

1 printf(\输出译码结果为:\\n\ inti,j,k,x,m=0; char code[MAX];

for (i=0;i

for (j=0;j

if(str[i]==ht[j].data) //在数组中循环查找与输入字符相{

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

{

code[m]=hcd[j].cd[k]; //把输出编码赋值到数组中 m++;

同的编号,相同的就输出这个字符的编码

}

break; //输出完成以后跳出当前的for循环

}

4 程序测试


电文编码译码(哈夫曼树)课设报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:鲁质监特字〔2009〕275号附件一:山东省气瓶充装许可实施细则

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

马上注册会员

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