苏宁iphone8碎屏险碎屏险怎么样

拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(37d34fbca19a6634-ua98).
重新安装浏览器,或使用别的浏览器根据创建的Huffman树来确定个字符的01编码;3.5解码压缩即根据哈夫曼树进行译码;读取编码文件,依据创建的Huffman树,定义一;4.主要模块说明;下面是该系统的模块:;4.1首先定义一个结构体:;structhead;//记录字符;//权重;intparent,lch,//定义双亲;charb
根据创建的Huffman树来确定个字符的01编码,左孩子为0,右孩子为1。读取文件,依次将每个字符用他们的编码表示,即完成一次编码。
3.5解码压缩即根据哈夫曼树进行译码
读取编码文件,依据创建的Huffman树,定义一个指针指向根结点。从根结点开始,每读一个字符,指针变化一次(当读取的字符是‘1’时,指针指向当前所指结点的右孩子,当读取的字符是‘0’时,指针指向当前所指结点的左孩子),直至该指针所指结点为叶子结点时结束(即当结点的左右孩子均为空时)。将当前叶子结点所代表的字符值输出到译码文件中,依次读取编码文件中的字符,按照上述方法依次进行下去直至文件
4. 主要模块说明
下面是该系统的模块:
4.1首先定义一个结构体:
struct head
//记录字符
int parent,lch,//定义双亲,左孩子,右孩子
char bits[256]; //存放哈夫曼编码的数组
header[512],//头部一要定设置至少512个,因为结点最多可达256,所有结点数最多可达511
4.2然后是实现各个功能的函数:
void show()
//显示文本文件的内容
unsigned char ctoa(char a[]) //将数组的前八位转成二进制形式bit位
char *code(unsigned char temp,int leafnum)
//寻找对应字符的编码串,并返回
void yasuo(char *infilename,char *outfilename)// 对文本编码函数
void jieya(char *infiname,char *outfilename) //对压缩文件解码
void ctoa(unsigned char a,char code[])
// 字符转为二进制
形式存入8位数组
int strcmp1(char buf[],struct head head[],int n,unsigned char &c) //将buf字符串与header[i].bits[]中匹配,成功后对应的字符由c带回
void strcpy1(char buf[],char a[],int)
//将字符串a中长
度为j的部分
复制到buf数
4.3最后是主函数:
在主函数中含有菜单函数void MainMenu()和帮助函数void help(),最后通过switch语句,调用各种函数,分别完成各自的功能。
5. 部分重要函数的实现
5.1.void yasuo(char *name,char *name1)的实现:
1)记录文件中字符频度;
2)根据频度建树;
3)根据哈夫曼树编码;
4)对文件进行编码,写入新文件(核心);
5)将字符编码对照表写入文件;
6) 将文件的哈夫曼编码输出到显示器上。
5.2.void jieya(char *name,char *name1)的实现:
1)读入必要的数据;
2) 读入编码对照表,放入header[i].bits[]数组中;
3) 对读入的编码对照表进行排序,长度短的排在前面;
4) 将编码读入内容,进行解码工作。
其实在这次课程设计中遇到很多问题,第一就是知识学的不扎实,必须从最基本的书本知识看起。其次通过网络资源使我了解的知识更加丰富,增强了我对网络资源的检索能力,使我能够
更好的应用网络资源来完成自己需要完成的任务。所以课程设计不仅能培养我们的专业知识,而且还能培养我们的动手能力,使我们以后能够更加适应社会的发展。
通过这次课程设计,使我的自学能力有所提高,让我知道了怎么去接受一个新的知识并且能够很好的掌握它。同时也增强我的独立思考能力和动手能力;通过编写程序代码和调试运行,我们可以逐步积累调试程序的经验,逐渐培养我们的编程能力和利用计算机解决实际问题的能力。课程设计为我们提供了一个自己动手实践的平台。
另一方面,在课程设计的过程中,使我明白了面向对象与面向对象的差别。在面向对象过程中,类的设计是至关重要的,类设计好了等于程序就成功了一半,所以这次的课程设计帮助我复习了这一学期面向对象课程的学习,刚好可以弥补这一学期面向对象学习的不足。同时,也使我对数据结构与算法的知识有了一定的了解,帮我在学习数据结构与算法的课程中奠定了一定的基础,使我以后学习数据结构与算法的时候可以更加轻松。
这次课程设计不但使我掌握了一些知识,更重要的是使我认识到了作为程序员的艰辛和辛苦。一个星期面对着电脑,在你面前只有一行行的代码,在你的耳旁只有键盘的敲击声和点击鼠标的声音,说实话确实很无聊也很辛苦。但当自己看到自己编写的程序顺利通过的时候,心里的成就感就油然而生,心中的疲倦也消失了,我想,当程序员看到自己的程序能够编译成功的话,也是这种感觉吧!
虽然这次课程设计结束了,但我们学习C++等语言的步伐不能停止,在今后的学习过程中,我会更加努力,争取在今后的课程中学得更好,下次的课程设计能够更加成功。
数据结构(C++版)(第二版)
王红梅、胡明、王涛编著 数据结构(C++版)学习辅导与实验指导(第二版)
王红梅、胡明、王涛编著
1、农夫过河源代码
public class FarmerProcedure { public static final int MaxSize=10;
static int k=0;
int[] vertex=new int[16]; int[][] fwsc=new int[MaxSize][MaxSize];
boolean isSafety(int farmer,int wolf,int sheep,int cabbage)
if(sheep!=farmer&&(wolf==sheep||sheep==cabbage))
public void Graph()
for(int i=0;i&MaxSi++)
for(int j=0;j&MaxSj++)
fwsc[i][j]=0;
for(int farmer=0;farmer&=1;farmer++)
for(int wolf=0;wolf&2;wolf++) {
for(int sheep=0;sheep&2;sheep++)
for(int cabbage=0;cabbage&2;cabbage++)
if(isSafety(farmer,wolf,sheep,cabbage)) {
for(int i=k-1;i&k;i++)
vertex[i]=8*farmer+4*wolf+2*sheep+1*
for(int i=0;i&k;i++)
for(int j=0;j&k;j++) {
fwsc[i][j]=1;
fwsc[j][i]=1;
public void dfsTraverse(){
route=new boolean[k];
for(int i=0;i&k;i++){
if(route[i]==false)
public void dfs(int i){
System.out.println(vertex[i]);
for(int j=0;j&k;j++)
if(fwsc[i][j]==1&&route[j]==false)
public static void main(String[] args)
FarmerProcedure temp=new FarmerProcedure();
System.out.println(&过河情况&);
temp.Graph();
} } temp.dfsTraverse();
2、求二叉树叶子结点个数源代码 递归算法:
#include&iostream.h& int count=0; struct BiNode {
}; BiNode *lchild,*
class BiTree {
三亿文库包含各类专业文献、行业资料、专业论文、外语学习资料、幼儿教育、小学教育、中学教育、数据结构-哈夫曼-二叉树-农夫过河01等内容。 
 实验报告( 2015 / 2016 学年 第二学期) 课程名称 实验名称 数据结构 A 二叉树的基本操作及哈夫曼编码译码系统的实现 2016 实验时间 指导单位 指导教师 年 4 ...  数据结构实验三 哈夫曼编解码器_表格类模板_表格/模板_实用文档。北京邮电大学信息...实验内容 利用二叉树结构实现赫夫曼编/解码器。 基本要求: 1、初始化(Init):...  实验内容:哈夫曼编码设计三.实验目的:掌握树和二叉树的概念及工作原理,运用其原理及概念完成上述实验题中的内容。隐藏&& 数据结构实验报告 题目:数据结构实验报告 ...  数据结构实验报告6-二叉树与哈夫曼树_互联网_IT/计算机_专业资料。《数据结构与算法》实验指导 V2016 实验六【实验目的】 二叉树 1、掌握二叉树的基本存储表示。...  数据结构哈夫曼树实验报告_工学_高等教育_教育专区。实验报告北京邮电大学信息与...掌握二叉树基本操作的实现方法 了解赫夫曼树的思想和相关概念 学习使用二叉树解决...  二叉树和哈夫曼实验报告 隐藏&& 数据结构实验报告 1 实验三一、实验目的 二叉树的基本运算 1、使学生熟练掌握二叉树的逻辑结构和存储结构。 2、熟练掌握二叉树的...  总结通过本次数据结构实验, 我学会了利用哈夫曼树解决编译代码的问题, 并且初步了解掌 握了二叉树、树的用法。实验重点是建立哈夫曼三叉树,建立编码表,解码函数,...  基本要求 2.1 为农夫过河问题抽象数据模型体会数据模型在问题求解中的重要性; 2.2 设计一个算法求解农夫过河问题,并输出过河方案; 3 概要设计 3.1 数据结构的...  数据结构 农夫过河问题_工学_高等教育_教育专区。数据结构的课程设计 带截图#include&iostream& #define VertexNum 16 //最大顶点数 typedef...用户:****
用户:****
用户:**3108809@qq.**
用户:****
用户:****
用户:****
用户:****
用户:****
用户:****
用户:****
用户:****
用户:****
用户:****
用户:****
用户:****
用户:****
用户:**in0131**
用户:****
用户:****
用户:**gxin10owen@**
北风网和苏州大学深度合作
北风大数据培训正式落户苏大
&&& 零基础大数据课程火热报名中
&&&&&&&&&&&&&&北风网和苏州大学深度合作
北风大数据培训正式落户苏大
&&& 零基础大数据课程火热报名中
&&&&&&&&&&&&&&&
分享:9999+
课程顾问贴心解答
为你推荐精品课程,无论就业还是升职加薪,毫无压力。
名企定制紧随大流
量身打造紧贴企业需求的实用性课程。
系统教学把控效果
集学、测、练为一体的学习系统为你科学的安排学习进度,提高效率。
一线大师1对1指导
课程研发团队内一线资深讲师一对一指导,手把手教学,直到学会。
点播答疑完美结合
每周2-3次直播解答,保证学员日常学习问题能得到解决。
量身定制学习计划
告别杂乱的学习方式,我们会根据你的情况定制学习计划。
一、课程目标:
本课程系北风网产品总监风舞烟老师最新一部收费课程,本课程是专门为那些想进一步提高自己JS水平的学员准备的。课程从最简单的JavaScript面向对象特性说起,一直到最后的第三方JS框架源码解读,JS高级调试技巧,JS性能调优及JS设计模式和自己封装JS框架等,可谓JS&OOP方向的网络教程中最全面、系统、深入并最通俗易懂的教程.
二、课程特色:
1:绝对通俗易懂,讲师具有丰富的教学与实战经验,全程学员互动
2:网上讲JAVASCRIPT&OOP课程不多,有的也是简单几讲带过,我们的课程是当之无愧史上讲解JAVASCRIPT&OOP最全面,最细致深入的课程
3:我们的课程深入浅出,不讲高深的理论,全程侧重于动手能力的培养与代码实战
4:北风产品总监亲自授课,因为专注,所以专业
5:北风内部讲师课程,专门的技术售后答疑群(QQ:),有课程相关问题可以及时解答
6、本课程系基础提升课程,照顾到没有JavaScript基础的学员,特赠送JavaScript基础课程
三、适用人群:
该课程适合喜欢学习热爱学习JavaScript和前端技术的童鞋们,绝对系统、全面、深入且通俗易懂,要求学员有JavaScript基础,属于技能提升课程
四、课程详情:
4.1、为什么要学习JavaScript?
如果三年前你问我应该学什么语言,我会告诉你是Java,C#。如果六年前呢,我会说是PHP。如果你现在想学一门语言的话,那么我说,你应该学习JavaScript。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
我认为,每一位Web开发人员都应该学习JavaScript。目前推出的许多新技术都支持这个观点。而这之后的唯一原因就是,它太普及了。你可以使用JavaScript为各种人做出令人惊叹的作品。你可以在任何一台机器上立刻开始工作。
不是所有公司都用Ruby,也不是所有公司都用.NET。而我相信,绝大多数时候,这些公司都需要深入理解JavaScript的人。微软、Facebook、苹果还有谷歌他们都用javaScript&做出了非常优秀的产品。
作为一个程序员,学习JavaScript或许是你能做到的,最有挑战性,同时也是最有益处的事情了。这是一种变化繁多的语言,在程序中代码量比你想象的更要庞大。它含有大量的新知识,一些好用的新API,还有它在持续发展。
当人们谈到HTML5的时候,议论的内容大多都是JavaScript。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&--&北风网产品总监:风舞烟
4.2、课程简介
1.&JS准确来说应该算是函数式语言,但是它确实能实现面向对象。
2.&基于为什么要使用面向对象的技术,是因为面向对象的封装、继承、多态等特性能提高编程效率,可复用性等,这一点在开发大中型项目里体现的尤为明显。当然程序运行的效率其实跟你使用的是面向过程还是面向对象无关,而是跟你写的具体代码或是应用的框架有关。OOP是一种很好的理念,它不仅仅应用在代码实现上,而是贯穿于整个软件过程。
3.&在JS中要不要使用OOP,这个应该是要看场合的。比如,如果你使用了一个OOP实现的框架(ExtJS等)那么使用OOP是理所当然的。但是如果只是一段简单的操作DOM的JS,那么我觉得就完全没有考虑什么OOP。记住一点,如果要用OOP,那肯定是用了OOP写出更健壮,更具可维护性,更高效的代码,而不是因为觉得OOP更高级,更显技术才用。
本课程系统全面深入的为您介绍JavaScript前世今生,及面向对象的所有特性,让您快速了解并掌握JavaScript&OOP编程。
4.3、课程大纲
1.&前言-为什么你要学习JavaScript
2.&JS开发神器-WebStorm高级使用技巧
3.&使用方括号([&])引用对象的属性和方法
4.&Web浏览器中JavaScript调试技巧
5.&用定义函数的方式定义类
6.&使用new操作符获得一个类的实例
7.&动态添加、修改、删除JS对象的属性和方法
8.&使用大括号({&})语法创建无类型对象
9.&prototype原型对象
10.初识javascript函数对象
11.函数对象和其他内部对象的关系
12.将函数作为参数传递
13.传递给函数的隐含参数_arguments
14.函数的apply、call方法的运用
15.深入认识JavaScript中的this指针
16.理解javascript中类的实现机制
17.使用prototype对象定义类成员
18.JavaScript类的设计模式优化
19.JavaScript类的公有成员与私有成员
20.JavaScript类的静态成员
21.在JavaScript中利用for(&in&)语句实现反射
22.JS中利用反射动态设置CSS样式高级技巧
23.利用共享prototype实现继承的用法与缺陷
24.利用反射机制和prototype实现JS继承
25.参考prototype.js框架自实现JS中的类的继承
26.Prototype.js源码剖析与使用示例
27.在JavaScript中实现抽象类与虚方法
28.JavaScript中使用抽象类的示例
29.自定义实现JS中最简单的事件设计模式
30.重构自定义JavaScript事件处理程序解决事件传参问题
31.重构自定义JavaScript事件处理程序多事件绑定机制
32.JavaScript面向对象综合示例
33.JS压缩与混淆工具(JSA、JSCompressor、Google&Closure&Compiler&)
34.&JS高级调式工具(FireBugLite)
赠送课程目录:
Javascript基础核心编程
1、ECMAScript语法基础&
2、BOM浏览器对象
3、DOM操作基础与高级应用&
4、JavaScript中表单操作
5、拖动及表格排序
6、JavaScript中的面向对象编程(一)
7、JavaScript中的面向对象编程(二)
8、JSON语法详解及应用
9、JavaScript中利用Ajax实现客户端与服务器端通信
五、收听这个课程你能学到的东西
学玩本套课程,您会有以下收获:
1.学习JS的调试,性能优化,及一些优秀前端工具的使用
2.对JS的应用有更深层次了解
3.对JS&OOP有比较清晰的认识并能熟练使用
4.自己能动手写一个基于JS&OOP的简单框架
5.对于后继jquery,easyui,extjs等富客户端的学习打好基础
6.能用于Java,PHP,.NET开发,移动开发工作中
您暂未登录不能收藏!请登录后在进行课程的收藏!哈夫曼编码译码系统课程设计实验报告(含源代码C++_C语言)[1]-免费论文
欢迎来到网学网学习,获得大量论文和程序!
哈夫曼编码译码系统课程设计实验报告(含源代码C++_C语言)[1]
【C语言开源代码栏目提醒】:--在 C语言开编辑为广大网友搜集整理了:哈夫曼编码译码系统课程设计实验报告(含源代码C++_C语言)[1] - 绩等信息,祝愿广大网友取得需要的信息,参考学习。&&&&
目 录摘 要 ………………………………………………………………………..……………… IIAbstract …………………………………………………………………………..………... II第一章 课题描述………………………..………………………………………………….. 11.1 问题描述………………………………………………………………………………...11.2 需求分析…………………………………………………..…………………………… 11.3 程序设计目标……………………………………………………………………………第二章 设计简介及设计方案论述 ………………………………………………………… 22.1 设计简介.………………………………………………..………………………..….…22.2 设计方案论述……………………………………………..…………………….………22.3 概要设计…………………………………………………..………………………….…2第三章 详细设计…………………………………………………………..……….….…….. 43.1 哈夫曼树…………………………………………………..………………………….…43.2 哈夫曼算法………………………………………………..……………………….….…43.2.1 基本思想………………………………………………..……………………..…..….…43.2.2 存储结构………………………………………………..………………………….....…43.3 哈夫曼编码………………………………………………..………………………….…53.4 文件 I/O 流………………………………………………..………………………….…63.4.1 文件流…………………………………………………..………………………………63.4.2 文件的打开与关闭………………………………………..…………………….……….73.4.3 文件的读写…………………………….………………..………………………..…..…73..5 C 语言文件处理方式……………………………………………………………………第四章 设计结果及分析…………………………………………………..……………..….. 84.1 设计系统功能………………………………….……………………………….....….…84.2 进行系统测试……………………………………………..………………………….…8总 结 …….……………………………………………………..…………………………...13致 谢 …….……………………………………………………..……………………..…….14参考文献 …….………………..………………………………..……………………..…….15附录 主要程序代码 ………...………………………………..………………………..….16 东北电力大学计算机科学与技术专业 综合设计报告 摘 要 在这个信息高速发展的时代,每时每刻都在进行着大量信息的传递,到处都离不开信息,它贯穿在人们日常的生活生产之中,对人们的影响日趋扩大而利用哈夫曼编码进行通信则可以大大提高信道利用率,缩短信息传输时间,降低传输成本。&&&&在生产中则可以更大可能的降低成本从而获得更大的利润,这也是信息时代发展的趋势所在。&&&&本课程设计的目的是使学生学会分析待加工处理数据的特性,以便选择适当的逻辑结构、存储结构以及进行相应的算法设计。&&&&学生在学习数据结构和算法设计的同时,培养学生的抽象思维能力、逻辑推理能力和创造性的思维方法,增强分析问题和解决的能力。&&&&此次设计的哈夫曼编码译码系统,实现对给定报文的编码和译码,并且任意输入报文可以实现频数的统计建立哈夫曼树以及编码译码的功能。&&&&这是一个拥有完备功能的系统程序,对将所学到的知识运用到实践中具有很好的和研究价值.关键词:信息;通讯;编码;译码;程序 - II - 东北电力大学计算机科学与技术专业 综合设计报告 Abstract This is a date that information speeding highly development and transmit informationevery time everywhere cannot leave the information it passes through during the peopledaily life production the influence expands day by day to the people but codes usingHuffman carries on the correspondence to be possible to raise the channel use factor greatlyreduces the intelligence transmission time reduces the transsion cost. May greatlypossible reduce the cost in the production thus obtains a bigger profit this is also theinformation age development tendency is. This curriculum projects goal is makes the studentaemic society to analyze treats the processing data the characteristic with the aim ofchoosing the suitable logical organization the memory structure as well as carries on thecorresponding algorithm design. The student during the study construction of data andalgorithm design’s raises students abstract thinking ability logic reasoning ability and thecreative thought method the enhancement analysis question and solves the question ability.This designs Huffman codes the code recognition system realizes to assigns the text the codeand the decoding and the arbitrary input text may realize the frequency statistics establishesthe Huffman tree as well as the code decoding function. This is one has the complete functionsystem program to the knowledge which will learn utilizes in the practice has the very goodstudy and the research value.Keys:Information Communication Coding Decoding Procedure - III - 第一章 课题描述1.1 问题描述 利用哈夫曼编码进行通信,可以的数据量,提高传输效率,缩短信息的传输时间,还有一定的保密性。&&&&现在要求编写一程序模拟传输过程,实现在发送前将要发送的字符信息进行编码,然后进行发送,接收后将传来的数据进行译码,即将信息还原成发送前的字符信息。&&&&1.2 需求分析在本例中设置发送者和接受者两个功能,1.2.1 发送者的功能:①输入待传送的字符信息;②统计字符信息中出现的字符种类数和各字符出现的次数(频率);②根据字符的种类数和各自出现的次数建立哈夫曼树;③利用以上哈夫曼树求出各字符的哈夫曼编码;④将字符信息转换成对应的编码信息进行传送。&&&&1.2.2 接受者的功能:①接收发送者传送来的编码信息;②利用上述哈夫曼树对编码信息进行翻译,即将编码信息还原成发送前的字符信息。&&&&从以上分析可发现,在本例中的主要算法有三个:(1)哈夫曼树的建立;(2)哈夫曼编码的生成;(3)对编码信息的翻译。&&&&1.3 程序设计目标 层次一:编程从文件中读取一段报文,首先统计字符的频度,然后建立哈夫曼树,并给出报文的编码,然后根据使用者的需要对指定文件里的任意二进制编码进行译码并显示。&&&& 层次二:使用者从系统界面输入字符串,统计从键盘输入的字符串信息,然后建立哈夫曼树,并给出报文的编码,然后根据使用者的需要对指定文件里的或者使用者从系统界面输入任意二进制编码的进行译码并显示。&&&& -1- 东北电力大学计算机科学与技术专业 综合设计报告 第二章 设计简介及设计论述2.1 设计简介 文字处理是现代计算机应用的重要领域。&&&&文本由字符组成,字符以某种编码形式存储在计算机中。&&&&每个字符的编码可以是相等长度的,也可以是不等长度的。&&&&ASCII 编码是等长编码。&&&&为了提高存储和处理文本的效率,在一些计算机应用场合,如数据通信,常采用不等长的编码,对常用的字符用较少的码位,不常出现的字符用较多的码位编码,从而减少文本的存储长度。&&&&哈夫曼编码就是用于此目的的不等长编码方法。&&&&所以本次设计就是通过构造哈夫曼树来生成哈夫曼编码,最终完成设计要求。&&&&2.2 设计方案论述 哈夫曼编码/译码程序主要由主函数、哈夫曼树类和各种功能函数组成,程序运行时首先进入主函数,对各种功能函数进行调用,从而实现了整个程序的运行。&&&&将各种不同的函数分别包含在各自的结构体中,使整个程序结构更加的清晰明了,各功能相互独立且紧密联系,有利于编程的实现,同时也体现了面向对象设计语言的封装性。&&&&在主菜单中运用了 switch函数 和“case”语句 ,便于对整个程序操作和控制;对数据保存在中,则运用了文件 I/O 流和 C 语言的文件处理方式,进行文件与内存之间输入,输出数据。&&&&2.3 概要设计2.3.1 第一部分功能的实现 在主函数声明 HuffmanTree1 类的对象 HuffmanNode,然后用 HuffmanNode 调用它的成员函数 TranslatedCode,此函数能读取 Adata.txt 里的字符串并统计,然后建立哈夫曼树并对各个字符编码和保存相关信息。&&&&然后对象 HuffmanNode 再调用成员函数TranslateArtcle()对指定文件得到的二进制编码进行译码,并保存翻译得到的信息。&&&& 2.3.1 第二部分功能的实现 获取并保存从键盘输入的字符串,并统计其信息。&&&&然后利用这些信息建立哈夫曼树对各个字符进行编码和保存相关信息。&&&&接着可以调用函数 HuffmanTranslateCoding2()对指定文件得到的二进制编码信息进行译码和保存得到的翻译信息,或者可以调用HuffmanTranslateCoding对从系统页面输入的二进制编码进行翻译并保存翻译信息 -2- 东北电力大学计算机科学与技术专业 综合设计报告 第三章 详细3.1 哈夫曼树 哈夫曼树也称最优二叉树.给定一组具有确定权值的叶子结点可以构造出不同的二叉树将其中带权路径长度最小的二叉树称为哈夫曼树.其中叶子结点的权值weight是对叶子结点赋予的一个有意义的数值量.设二叉树具有 n 个带权值的叶子结点从根结点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和叫做二叉树的带权路径长度weighted path length记为: n WPL ∑ Wklk wk 为第 k 个叶子结点的权值lk 为从根结点到第 k 个叶子结点的路径 k 1长度.3.2 哈夫曼算法3.2.1 基本思想 根据哈夫曼的定义一棵二叉树要使其带权路径长度最小必须使权值越大的叶子结点越靠近根结点而权值越小的叶子结点越远离根结点.依据这个特点便提出了哈夫曼算法其基本思想是: 1 初始化:由给定的 n 个权值w1 w2… wn构造 n 棵只有一个根结点的二叉 树从而得到一个二叉树集合 F T1T2…Tn 2 选取与合并:在 F 中选取根结点的权值最小的两棵二叉树分别作为左、右子 树构造一颗新的二叉树这棵新二叉树的根结点的权值为其左、右子树根结点的权值 之和 3 删除与加入:在 F 中删除作为左、右子树的两棵二叉树并将新建立的二叉树 加入到 F 中 4 重复2、3两步当集合 F 中只剩下一棵二叉树时这棵二叉树便是哈夫曼 -3- 东北电力大学计算机科学与技术专业 综合设计报告 树.3.2.2 存储结构 在由哈夫曼算法构造的哈夫曼树中非叶子结点的度均为 2,根据二叉树的性质可知具有 n 个叶子结点的哈夫曼树共有 2n-1 个结点其中有 n-1 个非叶子结点它们是在 n-1次的合并过程中生成的.为了便于选取根结点权值最小的二叉树以及合并操作设置一个数组 HuffmanNode2n-1保存哈夫曼树中各结点的信息数组元素的结点结构如图 3-1所示. weight parent lchild rchild nf 图 3-1 哈夫曼树 的结点结构 其中 weight:权值域保存该结点的权值 lchild:指针域保存该结点的左孩子结点在数组中的下标 rchild:指针域保存该结点的右孩子结点在数组中的下标 parent:指针域保存该结点的双亲结点在数组中的下标. Inf:存储相关的字符信息 可以用 C 中的结构类型定义上述结点. struct HuffmanNode char inf int weight int parent int lchildrchild 3.3 哈夫曼编码 哈夫曼树可用于构造最短的不等长编码方案具体做法如下:设需要编码的字符集合为d1d2…dn它们在字符串中出现的频率为w1 w2… wn以 d1d2…dn 作为叶子结点 w1 w2… wn 作为叶子结点的权值构造一颗哈夫曼编码树规定哈夫曼编码树的左分支代表 0,右分支代表 1,则从根结点到每个叶子结点所经过的路径组成的 0 和 1的序列便为该叶子结点对应字符的编码称为哈夫曼编码Huffman Code. -4- 东北电力大学计算机科学与技术专业 综合设计报告 在哈夫曼编码树中数的带权路径长度的含义是各个字符的码长与其出现次数的乘积之和所以采用哈夫曼树构造的编码是一种能使字符串的编码总长度最短的不等长编码.由于哈夫曼编码树的每个字符结点都是叶子结点它们不可能在根结点到其他字符结点的路径上所以一个字符的哈夫曼编码不可能是另一个字符的哈夫曼编码的前缀从而保证了解码的唯一性.3.4 C文件 I/O 流3.4.1 文件的打开与关闭 本程序中,建立流对象调用成员函数 open 和 close 进行文件的打开和关闭。&&&& 成员函数 open 返回非零值或者 true,表示流对象已经成功关联到磁盘文件,否则返回 0 或者 false 表示该流对象没有关联到文件。&&&& 成员函数 close 首先刷新缓冲区,把所有等待输出的内容写到磁盘文件中,然后关闭磁盘文件,并断开磁盘文件与文件缓冲区的联系。&&&&3.4.2 文件的读写 由于 ifstream、ofstream、fstream 分别派生自 istream、ostream、iostream,因此定义于类 istream、ostream、iostream 中的大部分共有成员函数。&&&& 流插入运算符函数 operator、put/get/getline函数主要用于格式化 I/O。&&&&write/ read 函数则于无格式化 I/O。&&&&3.5 C 语言文件处理方式3.5.1 结构体 FILE结构体 FILE 类型可以用来定义文件型指针变量,可以使指针指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。&&&&例如: FILE fp3.5.2 文件的打开(fopen 函数)和文件的打开(fclose 函数) FILE fp fp fopen文件名,使用文件方式; fclose(文件指针); 例如: -5- 东北电力大学计算机科学与技术专业 综合设计报告 FILE fp fpfopen“al””w” fclosefp3.5.3 文件的读写 fputc 函数 把一个字符写到磁盘文件上去,其一般调用形式为 putcchfp 其中 ch 是要输出的字符。&&&&fp 是文件指针变量。&&&& fget 函数 从指定的文件读入一个字符,该文件必须是以读或读写方式打开的。&&&& fgetc 函数的调用形式 chfgetcfp 其中 ch 是要输出的字符。&&&&fp 是文件指针变量。&&&&3.6 功能的详细设计 请看附录的源程序的 详细清单 第四章 设计结果及分析4.1 设计功能 层次一:编程从文件中读取一段报文,首先统计字符的频度,然后建立哈夫曼树,并给出报文的编码,然后根据使用者的需要对指定文件里的任意二进制编码进行译码并显示。&&&& 层次二:使用者从系统界面输入字符串,统计从键盘输入的字符串信息,然后建立哈夫曼树,并给出报文的编码,然后根据使用者的需要对指定文件里的或者使用者从系统界面输入任意二进制编码的进行译码并显示。&&&& -6- 东北电力大学科学与技术专业 综合设计报告4.2 进行系统测试 图 4-1 系统界面 -7-东北电力大学计算机科学与技术专业 综合设计 图 4-2 从文件中提取字符串并进行字符的统计 -8-东北电力大学计算机科学与技术专业 综合设计报告 图 4-3A 操作的字符串的哈夫曼编码 -9- 东北电力大学计算机科学与技术专业 综合设计报告图 4-3 B 操作对 Acode.txt 里的二进制编码进行译码和保存翻译信息 - 10 - 东北电力大学计算机科学与技术专业 综合设计报告图 4-4 C 操作从键盘输入字符串并统计、编码和保存 - 11 - 东北电力大学计算机科学与技术专业 综合设计报告图 4-5D 操作对 Ccode.txt 里的二进制编码进行译码再保存保存 图 4-6E 操作对在系统页面输入的二进制编码进行译码 - 12 -东北电力大学计算机科学与技术专业 综合设计报告 图 4-7F 操作退出系统 - 13 - 东北电力大学计算机科学与技术专业 综合设计报告 图 4-8 以上操作得到的相关数据 图 4-8 退出系统 总 结 通过本次设计使我对哈夫曼树及哈夫曼编码有了更深刻的理解,同时对 C,C的编程以及算法的实现产生了比较大的兴趣。&&&&还学到了许多在处理程序时的技巧和方法,这都对以后的学习大有裨益,以及感受到在编程设计中团队合作精神的重要性。&&&& 在这次程序设计中,我觉得重要的一点,那就是不要人云亦云,要有自己的主见,不管别人如何,一定要有自己的思想,并且始终不改变的去坚持,纵然,可能会遇到很多难以解决的困难,都要自始到终,相信自己能把这个程序做得出来。&&&&当自己最终在自己的努力下完成任务的时候,那就会有更多属于自己的收获,包括成功的喜悦以及程序中体现的思想。&&&& - 14 - 东北电力大学计算机科学与技术专业 综合设计报告 其次是我认为调试功能是整个编写程序过程中很重要的一个环节。&&&&通过此次实验我对调试有了更加深刻的理解,懂得怎么样去调试程序,如何发现错误,如何更高效的改正,最终能把程序实现。&&&& 致 谢 在本次课程设计的整个过程中,要特别感谢自始至终给我提供帮助和指导的 X 老师,是他耐心的指导才使得本次设计得以顺得完成,同时,也要感谢小组成员的不懈努力和互相配合,在此还要特别感谢为我们提供良好上机环境的学校.如果没有以上老师,同学和学校的帮助和支持,本次设计实难完成.再次感谢老师的精心辅导和同学的相互帮助,使我们顺利完成此次设计以及为学习以后的科目打下良好的基础. - 15 - 东北电力大学计算机科学与技术专业 综合设计报告 参考文献【1】 C 语言程序设计(第三版) 谭浩强 清华大学出版社 】 。&&&& C语言程序设计(第四版) 郑莉 董渊 何江舟 清华大学出版社 】 数据结构(C 版)。&&&&曲朝阳 郭晓利 王晓慧 孙鸿飞 中国电力出版社 2007.8 - 16 - 东北电力大学计算机科学与技术专业 综合设计报告 附录主要程序代码://HuffmanCode1.hifndef HUFFMAMCODE_Hdefine HUFFMAMCODE_Hincludeincludeusing namespace stdstruct HuffmanNode //定义哈夫曼树各结点
int weight - 17 -
【】【】【】【】【】
All Rights Reserved 版权所有?网学网 提供大量原创论文 参考论文 论文资料 源代码 管理及投稿 E_mail:
郑重声明: 本网站论文均来自互联网,由本站会员上传或下载,仅供个人交流、学习、参考之用,版权归原作者所有
请下载完后24小时之内删除,任何人不得大幅抄录、在期刊上发表或作为商业之用。如涉及版权纠纷,本网站不承担任何法律及连带责任。

我要回帖

更多关于 苏宁实体店没有碎屏险 的文章

 

随机推荐