



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
赫夫曼编码实验报告一、 问题描述:设计一个程序,通过赫夫曼树求得赫夫曼编码。二、 需求分析(1)用户输入权值的个数。输入的各字符的权值为整形int。 (2)输出的形式为整型。(3)程序执行可使用户在输入一列数值后,可得到由这些权值所得到的编码。(4)测试数据:输入权值个数为4,依次是:7 5 2 4;输出结果为:0,10,110,111。三、 概要设计1.抽象数据类型:ADT BinaryTree数据对象 D:D是具有相同特性的数据元素的集合。数据关系 R:若 D=,则R=,称BinaryTree为空二叉树;若 D,则R=H,H是如下二元关系:(1)在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;(2)若D-root,则存在D-root=D1,Dr,且D1Dr=;(3)若D1,则D1中存在唯一的元素X1,属于H,且存在D1上的关系H1包含于H;若Dr中存在唯一的元素Xr,属于H,且存在Dr上的关系Hr包含于H;H=,H1,Hr;(4)(D1,H1)是一棵符合本定义的二叉树,称为根的左子树,(Dr,Hr)是一棵符合本定义的二叉树,称为根的又子树。基本操作P: CreateHuffmanTree(&HT,); 初始条件:给出HuffmanTree的定义。 操作结果:构造HuffmanTree。 HuffmanCoding(HuffmanTreeHT,HuffmanCode&HC) 初始条件:HT存在。 操作结果:得出编码HC。 PrintHuffmanCode(HuffmanTreeHT,HuffmanCodeHC) 初始条件:HT,HC存在。 操作结果:显示字符与其对应的编码。 四、 详细设计1.赫夫曼树和赫夫曼编码的存储表示typedef struct char data; /结点字符 int weight; /结点权值 int parent,lchild,rchild; /父子结点 HTNode,HuffmanTree;typedef char * *HuffmanCode;2.返回赫夫曼树t的前i个结点中权值最小的树的根节点序号,函数select调用 int min(HuffmanTree &t,int i)int j,m;int UINT_MAX;unsigned int k=UINT_MAX;for(j=2;j=i;j+)if(tj.weightk&tj.parent=0) k=tj.weight; m=j; tm.parent=1; return m;3. 在赫夫曼树t的前i个结点中选择2个权值最小的树的根结点序号,s1为其中序号(权值)较小的void Select(HuffmanTree HT, int m, int& s1, int& s2) int i; s1 = s2 = 1; for(i=1; i=m; i+) if (HTi.parent=0) s1=i; break; for(i=i+1; iHTi.weight) s1=i; for(i=1; i=m; i+) if(HTi.parent=0&i!=s1) s2=i; break; for(i=i+1; i=m; i+) if(HTi.parent=0 & HTi.weightHTs2.weight & i!=s1) s2=i; 4.求赫夫曼编码算法void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int* w,int n)unsigned f;int m,i,s1,s2;unsigned c;HuffmanTree p;char *cd;if (n=1)return;m=2*n-1;HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode);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=m;+i,+p) (*p).parent=0;for(i=n+1;i=m;+i)Select(HT,i-1,s1,s2);HTs1.parent=i;HTs2.parent=i; HTi.lchild=s1;HTi.rchild=s2;HTi.weight=HTs1.weight+HTs2.weight;HC=(HuffmanCode)malloc(n+1)*sizeof(char*);cd=(char*)malloc(n*sizeof(char);cdn-1=0;for(i=1;i1): ); scanf (%d,&n);w=(int *)malloc(n*sizeof(int);printf(请依次输入%d个权值(整
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论