第一次发帖,先试试水,希望排版别太乱 今天给大家分享一串哈夫(3)

电脑杂谈  发布时间:2019-04-29 23:25:55  来源:网络整理

h[N+i].lchild = h[j].suffix ;

哈夫曼编码实验报告_哈夫曼树的编码c_哈夫曼树的编码

h[N+i].rchild = h[j+1].suffix;

h[j].parent = h[j+1].parent = h[N+i].suffix ;

}

}

// 创建一个code数组,储存每个字符对应的编码和编码长度 。2.哈夫曼编码规定哈夫曼编码的左分支代表0,右分支代表1,则从根节点到每个叶子结点所经过的路径组成的0和1的序列便为该叶子结点对应字符的编码,称为哈夫曼编码。,构造一棵哈夫曼编码树,规定哈夫曼编码树的左分支代表0,右分支代表1,则从根结点到每个叶子结点所经过的路径组成的0-1序列便是该叶子结点对应字符的编码,称为哈夫曼编码。

{

int i ,j,k,len;

char t[N]; //用一个字符数组存储编码

for ( i = 1 ; i <= N ; i++ )

{

len = 0 ;

for( j = i ,k = h[i].parent ; k != 0 ; j = k ,k = h[k].parent )

{

if( h[k].lchild == j )

t[len++] = '0';

else

t[len++] = '1' ;

}

c[i].suffix = i ;

c[i].length = len ;

c[i].weight = h[i].weight ;

c[i].code = ( char * )malloc ( sizeof(len+1) ); //给编码结点的编码字符串分配内存

a、开始符 b、结束符 c、任意字符 d、英文字符。如果文件中存在'/0'字符(或者说0x00字节),调用fgets之后就无法判断缓冲区中的'/0'究竟是从文件读上来的字符还是由fgets自动添加的结束符,所以fgets只适合读文本文件而不适合读二进制文件,并且文本文件中的所有字符都应该是可见字符,不能有'/0'。如果文件中存在'\0'字符(或者0x00字节),调用fgets之后就无法判断缓冲区中的'\0'究竟是从文件读上来的字符还是由fgets自动添加的结束符,所以fgets只适合读文本文件而不适合读二进制文件,并且文本文件中的所有字符都应该是可见字符,不能有'\0'。

len -- ;

j = 0 ;

while ( len >= 0 )

{

c[i].code [j++] = t[len--] ;

}

}

}

void Output( hNode h[] )//输出数组

{

int i ;

printf("哈弗曼数组输出为:\n");

for( i = 1 ; i < 2*N ; i++ )

{

printf("%3d%7d%7d%7d%7d \n",h[i].suffix ,h[i].weight ,h[i].parent ,h[i].lchild ,h[i].rchild );

}

printf("\n");

哈夫曼树的编码c_哈夫曼树的编码_哈夫曼编码实验报告

}

void Output( cNode c[] )//输出编码

{

int i ;

printf("输出哈弗曼编码为:\n");

for( i = 1 ; i <= N ; i++ )

{

printf("%3d%7d%7d%7s\n",c[i].suffix ,c[i].weight ,c[i].length ,c[i].code );

}

printf("\n");

}

void main()


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-95077-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...