用赫夫曼树进行字符串的编码.docVIP

  • 1
  • 0
  • 约3.27千字
  • 约 8页
  • 2019-12-23 发布于湖北
  • 举报
华北水利水电大学 数据结构 实验报告 实验三 树的应用 一、 实验题目: 树的应用——哈夫曼编码 二、 实验内容: 利用哈夫曼编码进行通信可以大大提高信道的利用率,缩短信息传输的时间,降低传输成本。根据哈夫曼编码的原理,编写一个程序,在用户输入结点权值的基础上求哈夫曼编码。 从键盘输入若干字符及每个字符出现的频率,将字符出现的频率作为结点的权值,建立哈夫曼树,求出各字符的哈夫曼编码。要求: 1. 输出存放哈夫曼树的数组HT的初态和终态; 2. 输出每个字符的哈夫曼编码; 3. 输入由上述若干字符组成的字符串,对电文进行编码并输出; 三、 程序源代码: #include #include #include #define N 8 #define M 4 typedef struct{ char data; char *code; unsigned int weight; unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; //动态分配数组存储赫夫曼树 typedef char **HuffmanCode; //动态分配数组存储赫夫曼编码表 void HuffmanCoding(HuffmanTree HT,HuffmanCode HC,char *data,int *w,int n,char *str { //存放n个字符的权值(均0,构造赫夫曼树HT,并求出n各字符的赫夫曼编码HC if(n=1 return; int m=2*n-1; //总节点数 HT=(HuffmanTreemalloc((m+1*sizeof(HTNode;//0号单元未用 HuffmanTree p; int i,j; printf(\n; printf(------------------------------\n; printf(存放哈夫曼树的数组HT的初态:\n; printf(叶子节点以及它的双亲节点,权值,左孩子,右孩子分别为:\n; for(p=HT+1,i=1;i=n;++i,++p,++data,++w { p-data=*data; p-parent=p-lchild=p-rchild=0; p-weight=*w; p-code=(char *malloc(n*sizeof(char; printf(%c %2d %2d %2d %2d\n,p-data,p-parent,p-weight,p-lchild,p-rchild; } for(;i=m;++p,++i { p-parent=p-lchild=p-rchild=p-weight=0; p-data=NULL; p-code=(char *malloc(n*sizeof(char; printf( %2d %2d %2d %2d\n,p-parent,p-weight,p-lchild,p-rchild; } for(i=n+1;i=m;++i{//建赫夫曼树 //在HT[1--i-1]选择parent为0且weight最小的两个节点,其序号分别为s1和s2 unsigned int m1=32767; unsigned int m2=32767;//m1,m2为最小和次小权值 int s1=0; int s2=0;//s1,s2为最小和次小节点的序号 for(int k=1;k=i-1;k++ { if((HT[k].parent==0(HT[k].weight { m2=m1; s2=s1; m1=HT[k].weight; s1=k; } else if((HT[k].parent==0(HT[k].weight { m2=HT[k].weight; s2=k; } } HT[s1].parent=i;HT[s2].parent=i; HT[i].lchild=s1;HT[i].rchild=s2; HT[i].weight=HT[s1].weight+HT[s2].weight; } printf(\n; printf(------------------------------\n; printf(存放哈夫曼树的数组HT的终态:\n; printf(叶子节点以及它的双亲节点,权值,左孩子,右孩子分别为:\n; for(p=HT+1,i=1;i=n;++p,++i printf(%c %2d %2d %2d %2d\n,p-data,p-parent,p-weight,p-lchild,p-rchild; for(;i=m;++p,++i printf( %2d %2d %2d %2d\n,p-parent,p-weight,p-lchild,p-rchild; //----从叶子到根逆

文档评论(0)

1亿VIP精品文档

相关文档