欢迎来到天天文库
浏览记录
ID:9162264
大小:224.50 KB
页数:39页
时间:2018-04-20
《哈夫曼树实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、2011-2012学年第一学期数据结构课内实验报告哈夫曼树专业:电子信息工程姓名:邓宏才学号:U201113233指导老师:刘应状实验题目1、实验目的:a.随机生成数据并统计b.创建哈夫曼树;c.哈夫曼编码d.哈夫曼译码;2、实验内容:a.随机生成数据并统计b.创建哈夫曼树;c.哈夫曼编码d.哈夫曼译码;3、数据结构及算法思想:创建哈夫曼树的描述:数据结构:数据的逻辑结构是树状结构;采用静态的三叉链表存放;算法思想:1.先把三叉链表中1-N个元素进行初始化,存放叶子节点,他们都没有孩子和双亲。2.再初
2、始化后n-1个非叶子节点元素。3.从当前森林中(在森林中树的根节点的双亲为0)选择两棵根的权值最小的树;删除合并是将选到的两棵树的根权和存入数组当前最前面的空闲元素中,并置入相应的双亲与孩子的位置。4.重复上述步骤直到森林中只含有一棵二叉树为止;哈夫曼树编码的描述:数据结构:数据的逻辑结构是树状结构;采用静态的三叉链表存放;算法思想:1.申请存储哈夫曼编码串的头指针数组,申请一个字符型指针,用来存放临时的编码串;2.从叶子节点开始向上倒退,若其为它双亲节点的左孩子则编码标0,否则标1;直到根节点为止,
3、最后把临时存储编码复制到对应的指针数组所指向的内存中;3.重复上述步骤,直到所有的叶子节点都被编码完;哈夫曼树译码的描述:数据结构:数据的逻辑结构是树状结构;采用静态的三叉链表存放;算法思想:1.从根结点开始向下递推,若其编码当前的数值为0,则到该节点的左孩子,否则转到其右孩子;重复上述步骤直到该编码中全部访问完,则树中对应的叶子节点则为所求2.依据上述步骤,对编码数组中所有编码全部进行译码;4、模块划分:1.选择两个权值最小的结点;2.创建哈夫曼树;3.打印哈夫曼树4.哈夫曼编码5.哈夫曼译码1、详
4、细设计及运行结果:1.生成随机数并保存至文件:2.哈夫曼编码:3.哈夫曼译码:1、调试情况,设计技巧及体会实验中对数据变量的修改有一部分没有太注意,没有传引用,导致实验结果和预期不对,断点调试后才找出问题所在。通过这次试验,自我感觉收获很深,无论是对于编程本身还是对集成开发环境的使用上,还有对知识掌握的熟练程度上,都有了很大的提高。对于哈夫曼树的算法有了很深的印象。流程图8、源程序清单Function.h#include#include#include5、h>#defineStatusint#defineOK1#defineERROR0#definerandom(x)(rand()%x)typedefstruct{doubleweight;unsignedintparent,lchild,rchild;charch;}HTNode,*HuffmanTree;typedefchar**HuffmanCode;usingnamespacestd;StatusCreatRandomNum(){srand(time(NULL));fstreamfile;fil6、e.open("random.txt",ios::binary7、ios::out);intRNum[10000];for(inti=0;i<10000;i++){RNum[i]=random(10);file<8、OR;chartemp;while(file.get(temp)){intt;t=(int)temp-48;n[t]+=1;}file.close();for(inti=0;i<10;i++){n[i]/=10000;cout<<(n[i])<9、ght10、11、HT[i].weights2)//s1放较小的序号{i=s1;s1=s2;s2=i;}}StatusHuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,double*w,intn,Status&Huffcode){if(w[0]==0)returnERROR;if(n<=1)
5、h>#defineStatusint#defineOK1#defineERROR0#definerandom(x)(rand()%x)typedefstruct{doubleweight;unsignedintparent,lchild,rchild;charch;}HTNode,*HuffmanTree;typedefchar**HuffmanCode;usingnamespacestd;StatusCreatRandomNum(){srand(time(NULL));fstreamfile;fil
6、e.open("random.txt",ios::binary
7、ios::out);intRNum[10000];for(inti=0;i<10000;i++){RNum[i]=random(10);file<8、OR;chartemp;while(file.get(temp)){intt;t=(int)temp-48;n[t]+=1;}file.close();for(inti=0;i<10;i++){n[i]/=10000;cout<<(n[i])<9、ght10、11、HT[i].weights2)//s1放较小的序号{i=s1;s1=s2;s2=i;}}StatusHuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,double*w,intn,Status&Huffcode){if(w[0]==0)returnERROR;if(n<=1)
8、OR;chartemp;while(file.get(temp)){intt;t=(int)temp-48;n[t]+=1;}file.close();for(inti=0;i<10;i++){n[i]/=10000;cout<<(n[i])<9、ght10、11、HT[i].weights2)//s1放较小的序号{i=s1;s1=s2;s2=i;}}StatusHuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,double*w,intn,Status&Huffcode){if(w[0]==0)returnERROR;if(n<=1)
9、ght10、11、HT[i].weights2)//s1放较小的序号{i=s1;s1=s2;s2=i;}}StatusHuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,double*w,intn,Status&Huffcode){if(w[0]==0)returnERROR;if(n<=1)
10、
11、HT[i].weights2)//s1放较小的序号{i=s1;s1=s2;s2=i;}}StatusHuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,double*w,intn,Status&Huffcode){if(w[0]==0)returnERROR;if(n<=1)
此文档下载收益归作者所有