




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构上机报告实验二 哈夫曼编码专业: 电信工程 班级: 电信1105 学号: U201113196 姓名: 刘航 完成日期:2012/10/28 1一、 实验目的1、 掌握哈夫曼树的基本概念及所有的存储结构。2、 掌握哈夫曼树的建立算法。3、 掌握哈夫曼树的应用(哈夫曼编码和译码)。4、 掌握对文件的使用。二、 实验内容:随机产生10000个数字并写入一个文件夹中,分别统计其中0、1、2、3、4、5、6、7、8、9出现的频率,并以各自的频率为权值,为其建立哈夫曼树,并对每个数字进行哈夫曼编码,要求有较好的人机交互过程。三、 程序源代码:#include <iostream>#i
2、nclude <string>#include <sstream>#include <ctime>#include <fstream>#include<stdlib.h>#include<iomanip>using namespace std;#define N 10string fileName="liuhang.txt" /你要生成的文件的名字int aN=0; /按顺序存放0到9出现的次数;float wN+1;const int n=10;const int m=2*n-1;struct tre
3、e /哈夫曼树的节点结构float weight; int parent; int lch,rch; struct codetypeint bitsn+1; int start; char ch;tree hftreem+1;struct codetype coden+1;void creathuffmantree();void huffcode();void Get_Randnum () /下面open文件的时候,打开方式:ios:in。文件不存在则自动创建stringstream sstr;fstream outfile;int temp;/设定随机数种子srand(unsigned)ti
4、me(NULL);for(int i=0;i<10000;i+)/产生随机数temp =rand()%10;/将随机数放在流sstr中sstr<<temp<<endl;/打开文件,如果文件存放,清空,如果不存在,新建一个文件outfile.open(fileName,ios:in|ios:trunc|ios:out);if(!outfile)cerr<<"Error opening "<<fileName<<" failedn"<<endl;/将生成的数写入文件outfile&
5、lt;<sstr.str();outfile.close();void Statistic_Data() /读取文件字符,统计频率int i;string s;string b="0","1","2","3","4","5","6","7","8","9" fstream outfile; outfile.open(fileName,ios:in);if(!outfile)cerr<&
6、lt;"Error opening "<<fileName<<" failedn"<<endl; /遍历文件,依次读取每个字符 while(outfile>>s) for(i=0;i<10;i+)if(s=bi) +ai; outfile.close(); int main()int i;cout<<"welcom!"<<endl;cout<<"已随机产生10000个数字(0到9)并存入文件liuhang.txt"<&l
7、t;endl;Get_Randnum ();Statistic_Data();for(i=0;i<10;i+)cout<<"数字"<<i<<"出现的次数为:"<<ai<<endl;cout<<endl;cout<<"建立哈夫曼树并编码"<<endl;for(i=0;i<N;i+)wi+1=ai/10000.0;/*for(i=1;i<=N;i+)cout<<wi<<endl;*/ /这段代码用于检验
8、数字出现的概率是否已经正确统计creathuffmantree(); huffcode(); return 0;void creathuffmantree() int i,j,p1,p2; float s1,s2; for(i=1;i<=m;i+) hftreei.parent=0; hftreei.lch=0; hftreei.rch=0; hftreei.weight=0; for(i=1;i<=n;i+) hftreei.weight=wi; for(i=n+1;i<=m;i+) p1=p2=0; s1=s2=32767; for(j=1;j<=i-1;j+) i
9、f(hftreej.parent=0) if(hftreej.weight<s1) s2=s1; s1=hftreej.weight; p2=p1; p1=j; else if(hftreej.weight<s2) s2=hftreej.weight;p2=j; hftreep1.parent=i; hftreep2.parent=i; hftreei.lch=p1; hftreei.rch=p2; hftreei.weight=hftreep1.weight+hftreep2.weight; /for(i=N+1;i<=2*N-1;i+)/cout<<hftre
10、ei.weight<<endl; /这段代码用于检验哈夫曼树是否已经正确建立void huffcode()codetype cd; int c,p; for(int i=1;i<=n;i+) cd.start=n+1; cd.ch=47+i; c=i; p=hftreei.parent; while(p!=0) cd.start-; if(hftreep.lch=c)cd.bitscd.start=0; else cd.bitscd.start=1; c=p; p=hftreep.parent; codei=cd; for(int i=1;i<=n;i+) cout&l
11、t;<"数字"<<codei.ch<<"的权值为:"<<hftreei.weight<<setw(5)<<" 编码为:" for(int j=codei.start;j<=n;j+) cout<<codei.bitsj<<" " cout<<endl;四、运行截图: 五、困惑及建议我觉得这个程序的重点有两个地方:第一,随机产出数字,并存入文件。这一点我们上学期C语言中没有讲到,然后我重新自学了C+中关于文件的知识,但在应用中依然出了很多问题,比如对几个文件类的使用感到困惑,如何遍
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版离婚财产分割协议书范本:离婚诉讼中财产分割的证据收集与运用技巧
- 2025版驾校场地租赁及教学设备更新协议
- 2025版超市店铺转让协议及供应链整合与物流配送合同
- 二零二五年度房屋买卖与房地产投资分析服务合同
- 2025版足浴店全方位承包合作协议
- 二零二五年度绿色建筑工程炮工安全责任书
- 2025版古建筑修复与设计合同标准
- 二零二五年度垃圾场智能监控系统施工合同
- 二零二五年度景区景点保洁与维护协议
- 2025年度智能设备研发劳务外包个人服务协议范本
- 《慢性萎缩性胃炎》课件
- 海钓项目商业计划书
- 洛阳理工学院教师招聘考试题库真题2023
- 安庆亿成化工科技有限公司化学品输送管线项目环境影响报告书
- 葫芦岛广宁220千伏输变电工程环评报告
- YS/T 922-2013高纯铜化学分析方法痕量杂质元素含量的测定辉光放电质谱法
- GB/T 22751-2008台球桌
- GB/T 12228-2006通用阀门碳素钢锻件技术条件
- GA 1205-2014灭火毯
- 社区工作者经典备考题库(必背300题)
- 金手指外观检验重点标准
评论
0/150
提交评论