C语言哈夫曼编码代码Word下载.docx

上传人:b****9 文档编号:13086567 上传时间:2022-10-04 格式:DOCX 页数:3 大小:13.91KB
下载 相关 举报
C语言哈夫曼编码代码Word下载.docx_第1页
第1页 / 共3页
C语言哈夫曼编码代码Word下载.docx_第2页
第2页 / 共3页
C语言哈夫曼编码代码Word下载.docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言哈夫曼编码代码Word下载.docx

《C语言哈夫曼编码代码Word下载.docx》由会员分享,可在线阅读,更多相关《C语言哈夫曼编码代码Word下载.docx(3页珍藏版)》请在冰豆网上搜索。

C语言哈夫曼编码代码Word下载.docx

HT,int 

n) 

i,j;

for(i 

1;

<

n;

i++)

if(!

HT[i].parent){s1 

i;

break;

}

for(j 

i+1;

j++)

HT[j].parent){s2 

j;

if((HT[s1].weight>

HT[i].weight)&

&

(!

HT[i].parent)&

(s2!

=i))s1=i;

if((HT[s2].weight>

HT[j].weight)&

HT[j].parent)&

(s1!

=j))s2=j;

HuffmanCoding(HuffmanTree 

HT, 

HuffmanCode 

HC[], 

*w, 

// 

算法6.13

w存放n个字符的权值(均>

0),构造哈夫曼树HT,

并求出n个字符的哈夫曼编码HC

i, 

*cd;

p;

cdlen;

if 

(n<

=1) 

return;

HT 

(HuffmanTree)malloc((m+1) 

sizeof(HTNode));

0号单元未用

for 

(i=1;

i<

=n;

i++) 

//初始化

HT[i].weight=w[i-1];

HT[i].parent=0;

HT[i].lchild=0;

HT[i].rchild=0;

(i=n+1;

=m;

HT[i].weight=0;

puts("

\n哈夫曼树的构造过程如下所示:

"

);

printf("

HT初态:

\n 

结点 

weight 

parent 

lchild 

rchild"

\n%4d%8d%8d%8d%8d"

i,HT[i].weight,

HT[i].parent,HT[i].lchild, 

HT[i].rchild);

按任意键,继续 

..."

getchar();

建哈夫曼树

在HT[1..i-1]中选择parent为0且weight最小的两个结点,

其序号分别为s1和s2。

Select(HT, 

i-1);

HT[s1].parent 

HT[s2].parent 

HT[i].lchild 

s1;

HT[i].rchild 

s2;

HT[i].weight 

HT[s1].weight 

HT[s2].weight;

\nselect:

s1=%d 

s2=%d\n"

 

s1, 

s2);

(j=1;

j<

=i;

j,HT[j].weight,

HT[j].parent,HT[j].lchild, 

HT[j].rchild);

//------无栈非递归遍历哈夫曼树,求哈夫曼编码

cd 

(char 

*)malloc(n*sizeof(char));

分配求编码的工作空间

m;

cdlen 

0;

++i) 

遍历哈夫曼树时用作结点状态标志

while 

(p) 

(HT[p].weight==0) 

向左

HT[p].weight 

(HT[p].lchild 

!

0) 

HT[p].lchild;

cd[cdlen++] 

='

0'

;

else 

(HT[p].rchild 

== 

登记叶子结点的字符的编码

HC[p] 

*)malloc((cdlen+1) 

sizeof(char));

cd[cdlen] 

\0'

strcpy(HC[p], 

cd);

复制编码(串)

(HT[p].weight==1) 

向右

2;

HT[p].rchild;

1'

HT[p].weight==2,退回退到父结点,编码长度减1

HT[p].parent;

--cdlen;

HuffmanCoding 

main() 

HuffmanTree 

HT;

*HC;

*w,n,i;

输入结点数:

scanf("

%d"

&

n);

HC 

(HuffmanCode 

*)malloc(n*sizeof(HuffmanCode));

(int 

*)malloc(n*sizeof(int));

输入%d个结点的权值\n"

n);

w[i]);

HuffmanCoding(HT,HC,w,n);

\n各结点的哈夫曼编码:

%2d(%4d):

%s\n"

i,w[i-1],HC[i]);

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

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

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

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