資源簡介
哈工程本科算法實(shí)驗(yàn)哈夫曼編碼【數(shù)據(jù)+代碼+說明+流程圖+測(cè)試用例】

代碼片段和文件信息
#include?
#define?MAXBIT?10?/*定義哈夫曼編碼的最大長度*/
#define?MAXVALUE?10000?/*定義最大權(quán)值*/
#define?MAXLEAF?30?/*定義哈夫曼樹中最多葉子節(jié)點(diǎn)個(gè)數(shù)*/
#define?MAXNODE?MAXLEAF*2-1?/*哈夫曼樹最多結(jié)點(diǎn)數(shù)*/
typedef?struct???/*哈夫曼編碼信息的結(jié)構(gòu)*/
{
????int?bit[MAXBIT];
????int?start;
}?Hcodetype;
typedef?struct???/*哈夫曼樹結(jié)點(diǎn)的結(jié)構(gòu)*/
{
????int?weight;
????int?parent;
????int?lchild;
????int?rchild;
}?Hnodetype;
void?huffmantree(Hnodetype?huffnode[MAXNODE]int?n)?/*構(gòu)造哈夫曼樹的函數(shù)*/
{
????int?ijm1m2x1x2;
????for(i=0;?i<2*n-1;?i++)?/*存放哈夫曼樹結(jié)點(diǎn)的數(shù)組huffnode[]初始化*/
????{
????????huffnode[i].weight=0;
????????huffnode[i].parent=-1;
????????huffnode[i].lchild=-1;
????????huffnode[i].rchild=-1;
????}
????for(i=0;?i ????{
????????printf(“輸入第%d個(gè)節(jié)點(diǎn)的權(quán)值(頻率)\n“i+1);
????????scanf(“%d“&huffnode[i].weight);
????}
????for(i=0;?i ????{
????????m1=m2=MAXVALUE;
????????x1=x2=0;
????????for(j=0;?j ????????{
????????????if(huffnode[j].weight ????????????{
????????????????m2=m1;
????????????????x2=x1;
????????????????m1=huffnode[j].weight;
????????????????x1=j;
????????????}
????????????else?if(huffnode[j].weight ????????????{
????????????????m2=huffnode[j].weight;
????????????????x2=j;
????????????}
????????}
????????huffnode[x1].parent=n+i;
????????huffnode[x2].parent=n+i;
????????huffnode[n+i].weight=huffnode[x1].weight+huffnode[x2].weight;
????????huffnode[n+i].lchild=x1;
????????huffnode[n+i].rchild=x2;
????}
}
void?main()
{
????Hnodetype?huffnode[MAXNODE];
????Hcodetype?huffcode[MAXLEAF]cd;
????int?ijcpn;
????printf(“輸入要構(gòu)造哈夫曼樹的節(jié)點(diǎn)個(gè)數(shù)?n\n“);
????scanf(“%d“&n);?/*輸入葉子節(jié)點(diǎn)個(gè)數(shù)*/
????while(n<1)
????{
????????printf(“error:輸入違法,無法構(gòu)造哈夫曼樹?\n請(qǐng)重新輸入:\n“);
????????scanf(“%d“&n);?/*輸入葉子節(jié)點(diǎn)個(gè)數(shù)*/
????}
????huffmantree(huffnoden);?/*建立哈夫曼樹*/
????for(i=0;?i ????{
????????cd.start=n-1;
????????c=i;
????????p=huffnode[c].parent;
????????while(p!=-1)
????????{
????????????if(huffnode[p].lchild==c)?cd.bit[cd.start]=0;
????????????else?cd.bit[cd.start]=1;
????????????cd.start--;
????????????c=p;
????????????p=huffnode[c].parent;
????????}
????????for(j=cd.start+1;?j ????????????huffcode[i].bit[j]=cd.bit[j];
????????huffcode[i].start=cd.start;
????}
????for(i=0;?i ????{
????????printf(“第%d個(gè)節(jié)點(diǎn)的哈夫曼編碼:“i+1);
????????for(j=huffcode[i].start+1;?j ????????????printf(“%d“huffcode[i].bit[j]);
????????printf(“\n“);
????}
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????2827??2016-12-06?09:04??哈夫曼編碼\哈夫曼.c
?????文件???????28844??2016-12-06?09:14??哈夫曼編碼\哈夫曼.exe
?????文件????????2053??2016-12-06?09:14??哈夫曼編碼\哈夫曼.o
?????文件???????10205??2016-12-06?09:17??哈夫曼編碼\測(cè)試用例_.xlsx
?????文件???????74805??2016-12-06?09:49??哈夫曼編碼\說明+流程圖.docx
?????目錄???????????0??2018-11-26?19:26??哈夫曼編碼\
評(píng)論
共有 條評(píng)論