文档介绍:系统应具备以下功能:1,构造哈夫曼数及哈夫曼编码:从终端读入字符集大小为n,n个字符窜以及n个对应的权值,建立哈夫曼树;利用以建好的哈夫曼树求每个叶子节点的哈夫曼编码,并保存。2,编码:利用以建好的哈夫曼编码对明文文件中的正文进行编码,然后将结果存入密文文件中。3,译码:将密文中的0、1代码序列进行译码。4,打印密文文件:将文件以紧凑的格式显示在终端显示器上,没三十行一个代码;同时,将此字符形式的编码文件保存。5,打印哈夫曼树及哈夫曼编码:将已在内存中的哈夫曼树以凹入表示形式显示在终端显示器上,同是将每个字符的哈夫曼编码显示出来,并保存到文件注释非常详细,希望对你有所帮助!#ifndefHuffman_Tree_h#defineHuffman_Tree_h#endif#include<>typedefstruct{unsignedintweight;unsignedintparent,lchild,rchild;}HTNode,*HuffmanTree;//存储赫夫曼树的结点类型typedefchar**HuffmanCode;//用于存储字符集中各个字符相应的赫夫曼编码voidstrcpy(char*S1,char*S2){//将字符串S2复制到S1inti=0;while(S2[i]!='\0'){S1[i]=S2[i];i++;}S1[i]='\0';}voidSelect(HuffmanTreeHT,intt,int&s1,int&s2){//在HT[1]到HT[t-1]中找出权值最小的两个S1和S2inti=1;s1=s2=0;HT[0].weight=65535;while(i<=t){//遍历查找权值最小的结点S1if(HT[i].parent==0&&HT[i].weight<HT[s1].weight)s1=i;i++;}i=1;while(i<=t){//遍历查找除S1外权值最小的结点S2if(i!=s1&&HT[i].parent==0&&HT[i].weight<HT[s2].weight)s2=i;i++;}}intHuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,int*w,intn){//根据各个字符的权值构造赫夫曼树HT,将对应的赫夫曼编码存储在HC中ints1,s2,m,i,start;unsignedintc,f;HTNode*p;char*cd;if(n<=1)return0;m=2*n-1;//赫夫曼树的总结点树为mHT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//申请存储赫夫曼树的空间for(p=HT+1,i=1;i<=n;++i,++p,++w){//将各个叶子结点的weight赋以相应的权值,parent,lchild,rchild均赋为0p->weight=*(w+1);p->parent=p->lchild=p->rchild=0;}for(;i<=m;++i,++p){//将各个非叶子结点的weight,parent,lchild,rchild均赋为0p->weight=p->parent=p->lchild=p->rchild=0;}for(i=n+1;i<=m;++i){//构造赫夫曼树,给各个非叶子