- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈夫曼源程序(国外英语资料)
哈夫曼源程序(国外英语资料)
#包括 stdio. h
#包括是。H
#包括字符串。”
#包括 malloc。”
#定义0
#定义max_num 10000
#定义马克斯60
#定义N 60
这是一个状态;
typedef char * HuffmanCode;
typedef struct {
unsigned int的重量;/ /字符对应的权值
unsigned int型的家长,rchild左右;
} HTNode * HuffmanTree;/ /此处定义了哈夫曼树节点的数据类型提供给赫夫曼使用。
typedef struct {
HuffmanTree HT;
char * c;/ /存放将要建立哈夫曼树的字符
int长度;/ /字符的大小,即开始第一步输入的一个整数
霍夫曼码HC;/ /存放对应的哈夫编码即对应的01代码
}赫夫曼;
int的;
无效的选择(HuffmanTree HT,int,int int * * S1,S2)
/ /把输入的字符按权值从小到大排序,挑出最小权值供huffmancoding()调用
/ /并且根节点的权值等于他的左右孩子的权值和
/ / 2是在剩下的字符中挑出的最小的劝值的字符
{
int i;
int 1 = max_num;/ /分钟是根节点的权值
2 / 2是在剩下的字符中挑出的最小的权值的字符int;
对于(i = 1;i =结束;i + +)
{
如果(HT [我]。母= = 0和HT [我]。体重<1)
{
*S1;
1 = HT [我]。重量;
}
}
2 = max_num;
对于(i = 1;i =结束;i + +)
{
如果(HT i =父= = 0 (!=我)和2 HT [我]的重量)。
{
* S2 =我;
2 = HT [我]。重量;
}
}
/ /测试printf(“qqqqq %d \ nwwwww %d\n”,1,2);
}
Huffman HuffmanCoding(Huffman Hfm)/将输入的字符以及他的权值,按照哈夫曼规则建立2叉树
{
--------------------------------- / * * /
我,N,M,S1,S2,开始;
中的C;
字符光盘;
n = hfm.longth;
如果(n≤1)返回HFM;
m = 2 * n-1;
对于(i = n + 1;i = m;++)
{
选择(HFM。HT,I-1,与S1或S2);
HFM。HT [S1]。母=我;
HFM。HT [ 2 ]。母=我;
HFM。HT [我]左右= S1;
HFM。HT [我]。rchild = S2;
HFM。HT [我]。重量= HFM。HT [S1]。重量+ HFM。HT [ 2 ]。重量;
/ /构造哈夫曼树时候,根节点的权值等于他的左右孩子权值和
/ /测试printf(“HT %d %d \ \ NS1,NS2,%d”,HFM。HT [我]。重量、S1、S2);
}
------------------------------------------ / * * /
HFM。HC =(霍夫曼码)malloc((n + 1)* sizeof(char *));
CD =(char *)malloc(N * sizeof(char));
CD [ N-1 ] = 0;
01 /中间变量用来存储字符对应的哈夫曼编码
对于(I = 1;i = n;++)
{
开始= n-1;
为(C = I,F = HFM。HT [我]母;F!= 0;C = F,F = HFM。HT [F]母)。
{
如果(C = = HFM。HT [F]。左右)[开始]——CD = 0;
[开始]——其他CD = 1”;
}
HFM。HC [我] =(char *)malloc((n-start)* sizeof(char));
strcpy(HFM。HC [我],和CD [开始]);
/ /将CD [ ]的值存储到变量HFM。HC [我]中
/ /该变量在霍夫曼数据类型中有定义
}
免费(光盘);
返回HFM;
}
Huffman InputHuffman(Huffman Hfm)/接收原始数据:从终端读入字符集大小N,N个字符和N个权值,
/ /建立哈夫曼树,存于文件hfmTree. DAT中供inithuffman()函数调用。
{
中的i,n;char a;
printf(“\n \n\n T T ********************构造哈夫曼树********************* \n”);
printf(“不字符以及它的权值,数据将保存到同名目录下的hfmtree。DAT“\n”);
printf(“请输入字符的个数:”);
scanf(
文档评论(0)