#include
#define maxsize 128
//字元表
typedef struct table;
//哈夫曼樹節點
typedef struct hfmtree;
//哈夫曼編碼
typedef struct hfmcode;
hfmtree hdata[2*maxsize-1];
hfmcode code[maxsize];
intcount = 0;
void insrtch(char
str,char ch)
str[len+1] = '\0';
while(len!=0)
str[0] = ch;
}int length(char *str)
return len;
}int getext();
fopen_s(&fp,"d:\\text.txt","r");
while(fread(&buf,1,1,fp))
fclose(fp);
//赫夫曼森林種樹
for(i=0;iif(tb[i].repeat !=0)
}//列印字元表
printf_s("\nnow,output the text table......\n");
getchar();
for(i=0;ireturn0;}
int buildtree()
}if (reset == 0)
else
if (tnum<2) break;
tnum=0;
small = 65636;
}printf_s("\nnow,output the huffman tree......\n");
getchar();
for(i=0;i<2*count-1;i++)
printf("%d: %c,%u,%d,%d,%d\n",i,hdata[i].data,hdata[i].weight,hdata[i].parent , hdata[i].lchild,hdata[i].rchild );
return0;}
int code()
}for (i = 0; i < count; i++)
return0;}
int encode()}}
printf("\n");
fclose(fpr);
fclose(fpw);
return0;}
int decode()
}fclose(fp);
printf_s("\ncongratulations! we success !\n");
return0;}
int main()
getext();//獲得字元重複次數
buildtree();//建立赫夫曼二叉樹,陣列儲存
code();//字首編碼
encode();//對一串文字進行編碼,儲存到文字檔案
decode();//對輸入的乙個或一串編碼進行解碼
getchar();
return
0;}
赫夫曼樹和赫夫曼編碼
赫夫曼樹 1 先把有權值的葉子節點按照從小到大的順序排成乙個有序序列,即 a 5 e 10 b 15 d 30 c 40 2 取前兩個權值最小的結點即a 5 和e 10 作為乙個新的結點n1的兩個子節點,結點權值較小的作為左結點,即a為左結點,e為右結點,n1的權值為兩個結點權值的和,即5 10 1...
赫夫曼樹和赫夫曼編碼
以下內容主要參考了嚴蔚敏版的資料結構教材。赫夫曼樹又叫做最優樹,是一類帶權路徑長度最短的樹,這裡討論的是最優二叉樹。假設現在有n個權值w1,w2,w nw 1,w 2,w n w1 w2 wn 如何構造一顆有n個葉子節點的二叉樹使得二叉樹的帶權路徑長度 k 1nwk lk sum n w k l k...
赫夫曼樹與赫夫曼編碼
問題描述 利用huffman編碼進行通訊可以大大提高通道利用率,縮短資訊傳輸時間,降低傳輸成本。但是,這要求在傳送端通過乙個編碼系統對待傳資料預先編碼,在接受端將傳來的資料編碼進行解碼 復原 對於有些通道,每端都需要乙個完整的編 解碼系統。試為這樣的資訊收發站編寫乙個huffman的編 解碼系統。給...