赵敏实验三题库.docVIP

  • 8
  • 0
  • 约4.04千字
  • 约 8页
  • 2016-10-20 发布于湖北
  • 举报
华北水利水电大学 数据结构 实验报告 2015~2016学年 第 二 学期 2015级 计算机科学与技术(专升本)专业 班级: 2015221 学号:201522122 姓名: 赵敏 实验三 树的应用 实验题目: 树的应用——哈夫曼编码 实验内容: 利用哈夫曼编码进行通信可以大大提高信道的利用率,缩短信息传输的时间,降低传输成本。根据哈夫曼编码的原理,编写一个程序,在用户输入结点权值的基础上求哈夫曼编码。 从键盘输入若干字符及每个字符出现的频率,将字符出现的频率作为结点的权值,建立哈夫曼树,求出各字符的哈夫曼编码。要求: 输出存放哈夫曼树的数组HT的初态和终态; 输出每个字符的哈夫曼编码; 输入由上述若干字符组成的字符串,对电文进行编码并输出; (选作)输入电文的哈夫曼编码,进行译码并输出。 实验要求: 使用C语言完成算法设计和程序设计并上机调试通过。 撰写实验报告,提供实验结果和数据。 写出算法设计小结和心得。 程序源代码: #includeiostream.h #includestdlib.h #includestring.h #define N 50 typedef struct{ unsigned int weight; unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; typedef char **HuffmanCode; void Select(HuffmanTree HT,int i,int s1,int s2); void reverse(char a[],int b); void Huffmancoding(HuffmanTree HT,HuffmanCode HC,int *w,int n); { int m,i; if(n=1) return; m=2*n-1; HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); p=NULL; for(p=HT+1,i=1;i=n;++i,++p,++w) { p-weight= *w; p-parent=0; p-lchild=0; p-rchild=0; } for(i=n+1;i=m;++i;++p) { p-weight=0; p-parent=0; p-lchild=0; p-rchild=0; } cout初态:endl; coutnode\tweight\tparent\tlchild\trchildendl; p=HT+1; for(i=1;i=m;i++,++p) { cout%d\t%d\t%d\t%d\t%d\n,i,p-weight,p-parent,p-lchild,p-rchildendl; } cout\nendl; int s1,s2,t; for(i=n+1;i=m;++i) {t=i-1; s1=s2=0; Select(HT,t,s1,s2); 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; } cout终态:endl; coutnode\tweight\tparent\tlchild\trchildendl; p=HT+1; for(i=1;i=m;i++;++p) { unsigned int c,f; char *cd; cd=NULL; HC=(HuffmanCode)malloc((n+1)*sizeof(char *)); cd=(char *)malloc(n*sizeof(char)); for(i=1;i=n;++i) { start=0; for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent) if(HT[f].lchild==c) cd[start++]=0; else cd[start++]=1; cd[start]=\0; k=strlen(cd); reverse(cd,k); HC[i]=(char *)malloc((n-start)*sizeof(char)

文档评论(0)

1亿VIP精品文档

相关文档