欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    数据结构实验报告05.docx

    • 资源ID:2894997       资源大小:68.66KB        全文页数:16页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构实验报告05.docx

    1、数据结构实验报告05数据结构实验报告班级:10011206姓 名:邹维韬 学 号:2012302516 E-mail:396881328日期:2013.11.24实验题目:哈夫曼编/译码器实验目的:了解掌握哈夫曼二叉树的创建和哈夫曼编码算法实验内容:编写一个程序,将输入字符串压缩为哈夫曼编码,生成编码表并进行解码。一、需求分析本程序以含父节点哈夫曼树作为算法的基本数据结构,利用哈夫曼生成树算法,推导出哈夫曼编码表,然后根据编码表对电文进行编码处理。译码方式采用哈夫曼树遍历的方式,得到权重(即可得到权重对应的字母),然后将译文输出存储。程序提供两种输入形式供用户选择:1.输入界面直接输入;2.文

    2、件输入。程序同样有两种输出形式:1.界面直接输出;2.文件输出。测试数据1. 直接输入:编码用户输入:Hello Wolrd/回车输出: (首先将用户输入存入文件1.txt)编码表为H-010 e-011 l-10 o-110 /空格-000W-001 r-1110 d-1111编码结果为010*(将编码结果存入文件2.txt) 解码用户输入:10110001/回车 输出:(首先将用户输入存入文件3.txt) 解码结果loW (将解码结果存入文件4.txt) 用户输入:1011000/回车(无法解码的非法输入) 输出:输入编码非法!程序错误!2. 文件输入编码输入提示:请输入文件名用户输入:1

    3、.txt/回车输出:编码表为H-010 e-011 l-10 o-110 /空格-000W-001 r-1110 d-1111编码结果为010*(将编码结果存入文件2.txt)用户输入:abcdefg.txt/回车(不存在的文件名)输出:找不到文件!程序错误!解码输入提示:请输入编码文件名用户输入:1.txt/回车输出: 解码结果loW (将解码结果存入文件4.txt)程序的运行过程是:1.按提示选择电文输入模式2.成功输入则进行权值统计,构造哈夫曼树,然后逆序遍历得到编码表,并根据编码表将输入电文进行编码,最后将编码结果存入文件2.txt,输入失败则报错退出3.按提示选择译文编码输入模式。4

    4、.输入合法则通过哈夫曼树正序遍历得到译文,存入文件4.txt中,输入失败则报错退出。 5.询问用户是否继续在该编码表下进行译文,输入Y回到第3步,否则继续。6.摧毁哈夫曼树,重新初始化一系列变量。7.询问用户输入是否结束程序,输入Y结束程序,输入N 则回到第1步。二 概要设计哈夫曼编码译码算法要求使用带权重与父结点二叉树作为数据存储结构,输入方式有直接输入和文件输入。由直接输入或者文件输入得到电文字符串Alice之后,对其进行权重统计,用两个共用下标的一维数组(一个int型,一个char型)储存权重统计结果。(也可采用char+int型结构体数组)。根据哈夫曼树生成算法,首先将树的各个子树(结

    5、点)赋予权值,然后从中取两个权值最小的无父的子树(结点)拼接到新结点上,删除原来的子树,将新子树(结点)放进树里,重复以上步骤直到只有一棵树。将生成的二叉树的各个无孩子结点进行逆序遍历回根结点,可由回溯路线得到每个权重(字符)所对应的编码值,据此得到编码表输出。根据编码表一一转化为哈夫曼编码密文Charlie。译文算法也是通过哈夫曼树遍历来实现,由根节点开始,从左到右依次读密文Charlie,读到1,遍历指针指向右孩子,读到0则指向左孩子,重复以上步骤直到遍历到没有孩子的结点,则该结点权重所指示的字符即是原字符,这是结点指针重新回到根结点,继续读取字符重复以上步骤直到密文Charlie全部读完

    6、。主程序包含哈夫曼二叉树的声明,电文输入函数、哈夫曼编码函数、编码密文输出储存函数、哈夫曼编码密文输入函数、哈夫曼解码函数、哈夫曼译码原文输出储存函数等。 为方便用户多次输入,主程序用循环结构重复执行,直到用户中止。1. 基本操作:int GetTreeHead(HTree &HT,int n)初始条件:有n个含权重有效结点的哈夫曼树H存在操作结果:输出H的根结点下标void GetWeight(char Alice,int W,int &N,char cW)初始条件:字符串数组Alice存在操作结果:对输入字符串进行字符统计与字符权重统计,字符存入cWk,其对应权重存入Wk,有一一映射关系。

    7、字符种数统计后存入整形N。void Select(HTree &HT,int n,int &a,int &b)初始条件:哈夫曼树HT存在,且字符种数为n操作结果:得到两个权值最小的子树(结点)下标,分别存入a,b(其中ab则a、b值交换)void HuffmanCoding(HTree &HT,HCode &HC,int *w,int n,char cW)操作结果:根据权重*w与对应字符cW生成哈夫曼树,并生成编码表,存入二维字符数组(或字符串数组)HCodevoid HuffmanDecoding(char Charlie,char Alice,HTree &HT,int n) 操作结果:将

    8、密文Charlie依据n个有效含权重结点的哈夫曼树HT,解码成译文存入Alice中。void WriteTxt(FILE *fp,char s,char a) 操作结果:将密文/译文字符串a写入新创建的,文件名为”s”的文件中。2. 本程序包含五个模块:主程序模块:含有判断和程序循环结构,调用以下几种函数达到哈夫曼编码/解码的目的。哈夫曼二叉树的声明电文输入函数哈夫曼编码函数编码密文输出储存函数哈夫曼编码密文输入函数哈夫曼解码函数哈夫曼译码原文输出储存函数等三 详细设计1. 元素类型、结构类型:定义:/哈夫曼树与哈夫曼编码矩阵的定义typedef struct tagHuffman unsig

    9、ned int weight; char cSign; unsigned int parent,lchild,rchild;HNode,*HTree;typedef char * *HCode;/关于哈夫曼树的一些基本操作:/选择函数,两次遍历寻找权重最小的两个结点void Select(HTree &HT,int n,int &a,int &b) int i; a=0; int tmp; unsigned int min=65535; for (i=n;i=1;i-) if (HTi.parent=0) if (HTi.weight=1;i-) if (HTi.parent=0) if (H

    10、Ti.weightb) tmp=b; b=a; a=tmp; /得到哈夫曼树的根结点int GetTreeHead(HTree &HT,int n) int i; for (i=1;i=2*n-1;i+) if (HTi.parent=0)return i; return -1;/(2)字符处理函数:/输入字符进行权重统计void GetWeight(char Alice,int W,int &N,char cW) int i,p=0,k=0; int iCheck; do iCheck=0; for(i=0;ik;i+) if (cWi=Alicep) Wi+; iCheck=1; brea

    11、k; if (iCheck=0) cWk=Alicep; Wk+; k+; p+; while(Alicep!=0); N=k;/ (3)输入-输出-存储函数/创建写入txtvoid WriteTxt(FILE *fp,char s,char a) fp=fopen(s,w+); if (fp!=NULL) fputs(a,fp); fclose(fp); printf(字符串已存入%s!n,s); else printf(无法创建%sn,s); Error(); /输入Alice(发送方)电文字符串,存入文件1.txtvoid InputAndFileWrite_1(char Alice)

    12、FILE *fp=NULL; int iCheck; char filename100; printf(-请选择输入模式-n); printf(1.直接输入n2.文件输入n); scanf(%d,&iCheck); /输入部分 system(cls); fflush(stdin); switch (iCheck) case 1: printf(请输入需要编码的字符串n_n); gets(Alice); WriteTxt(fp,文件1.txt,Alice); break; case 2: /文件写入部分 printf(请输入电文文件名:); scanf(%s,&filename); fflush(stdin); fp=fopen(filename,r+); if(fp=NULL) printf(找不到文件!n); Error(); fgets(Alice,CodeLength,fp); break; default:Error(); /输出编码结果,并存入文件2.txtvoid PrintAndFileWrite_2(HCode &HC,char Alice,char Charlie,int W,char cW,int n) int i,k,m; FILE *fp=NULL; /输出部分 printf(_n据此分析字频得到编码表n_n);


    注意事项

    本文(数据结构实验报告05.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开