信息论与编码实验报告
香农编码关键代码:
typedef struct {
int weight; int parent; int lchild; int rchild; }hnodetype; //哈夫曼树节点 typedef struct {
int bit[10]; int position; char sign; }hcodetype; //哈弗曼编码表
void Huffman(char sign[],int m[],int n); //函数声明 void main() {
int i=0,n=8; int m[10]={40,18,10,10,7,6,5,4}; char sign[10]="hufmcode";
cout<<setw(12)<<"各个字符为:"; for (i=0;i<n;i++) cout<<setw(8)<<sign[i]; cout<<endl<<setw(12)<<"字符加权为:"; for (i=0;i<n;i++) { float f=(float)m[i]/100; cout<<setw(8)<<f; }
cout<<endl<<endl<<"各字符的哈夫曼码为:"<<endl; Huffman(sign,m,n); }
void Huffman(char sign[],int m[],int n)
{ int i,j,m1,m2,x1,x2,c,p;
hnodetype *huffnode=new hnodetype[2*n-1]; //一共2n-1个节点 hcodetype *huffcode=new hcodetype[n],temp; for(i=0;i<2*n-1;i++) { //初始化哈夫曼树 huffnode[i].weight=0; huffnode[i].parent=0; huffnode[i].lchild=-1; huffnode[i].rchild=-1; }