大数据结构哈夫曼实验c语言

大数据结构哈夫曼实验c语言

ID:30271745

大小:90.00 KB

页数:10页

时间:2018-12-28

大数据结构哈夫曼实验c语言_第1页
大数据结构哈夫曼实验c语言_第2页
大数据结构哈夫曼实验c语言_第3页
大数据结构哈夫曼实验c语言_第4页
大数据结构哈夫曼实验c语言_第5页
资源描述:

《大数据结构哈夫曼实验c语言》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实用标准文案《用哈夫曼编码实现文件压缩》实验报告课程名称数据结构B实验学期2012至2013学年第一学期学生所在系部计算机学院年级2011专业班级信管B11-2学生姓名学号任课教师兰芸实验成绩精彩文档实用标准文案一、实验题目:用哈夫曼编码实现文件压缩二、实验目的:1、了解文件的概念。2、掌握线性链表的插入、删除等算法。3、掌握Huffman树的概念及构造方法。4、掌握二叉树的存储结构及遍历算法。5、利用Huffman树及Huffman编码,掌握实现文件压缩的一般原理。三、实验设备与环境:微型计算机、Windows系列

2、操作系统、VisualC++6.0软件四、实验内容:输入一些字符,即赫夫曼树结点的权值,创建Haffman树,再将各字符对应的哈夫曼编码写入文件中。五、概要设计:(1)构造Hufffman树—Hufffman算法(2)Huffman编码:数据通信用的二进制编码编码:根据字符出现频率构造Huffman树,然后将树中结点引向其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子的路径上得到的0、1序列。(3)二叉树的存储结构typedefstructnode{datatypedata;str

3、uctnode*lchild,*rchild;}BinTree;六、详细设计:1、构造Huffman树步骤:Ⅰ、根据给定的n个权值{w1,w2,……wn},构造n棵只有根结点的二叉树,令起权值为wj。Ⅱ、在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和。Ⅲ、在森林中删除这两棵树,同时将新得到的二叉树加入森林中。Ⅳ、重复上述两步,直到只含一棵树为止,这棵树即哈夫曼树。2、利用Select函数选出权值最小的两个结点。3、利用CreatHT函数构的建赫夫曼树先

4、将所有的叶子结点的父结点和左右孩子结点均赋值为0,并将输入的权值依次赋给叶子结点的weight域。从树的最底部开始循环Select函数共n-1次,将最小权的结点赋给中间结点的左孩子,将次小权的结点赋给中间结点的右孩子。精彩文档实用标准文案4、从叶子到根逆向求每个字符的赫夫曼编码,开辟字符串空间,从叶子结点开始逆向寻找每个中间结点的左右孩子,开辟字符空间为左孩子赋值为字符0,为右孩子赋值为字符1,运用strcpy函数将所得字符依次从右到左连接于所开辟的字符串空间,所得字符串即为赫夫曼编码。#include

5、h>#include#include#include#includestructnode{longweight;//权值unsignedcharch;//字符intparent,lchild,rchild;charcode[256];//编码的位数最多为256位intCodeLength;//编码长度}hfmnode[512];voidcompress();//主函数voidmain(){intchoice;printf("欢迎使用赫夫曼编码压

6、缩文件!请选择1or2:");printf("1.压缩文件");printf("2.退出!");scanf("%d",&choice);if(choice==1)compress();elseif(choice==2)return;elseprintf("输入错误!");}//压缩函数voidcompress(){inti,j;charinfile[20],outfile[20];FILE*ifp,*ofp;unsignedcharc;//longFileLength,filelength=0;intn,

7、m;//叶子数和结点数ints1,s2;//权值最小的两个结点的标号charcodes[256];longsumlength=0;精彩文档实用标准文案floatrate,speed;intcount=0;clock_tstart1,start2,finish1,finish2;doubleduration1,duration2;voidencode(structnode*nodep,intn);//编码函数intselect(structnode*nodep,intpose);//用于建哈弗曼树中选择权值最小的结点的

8、函数printf("请输入要压缩的文件名:");scanf("%s",infile);ifp=fopen(infile,"rb");if(ifp==NULL){printf("文件名输入错误,文件不存在!");return;}printf("请输入目标文件名:");scanf("%s",outfile);ofp=fopen(outfile,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。