ImageVerifierCode 换一换
格式:DOC , 页数:36 ,大小:439.54KB ,
资源ID:4571620      下载积分:5 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4571620.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(数据结构与算法专业课程设计格式要求.doc)为本站上传会员【二***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

数据结构与算法专业课程设计格式要求.doc

1、 《 数据结构和算法 》课程设计 (/第二学期第20周) 指导老师: 孙麒 郭奕亿 班级: 09计算机科学和技术1班 学号: E0968 姓名:倪建鹤 《数据结构和算法》课程设计任务书 《数据结构和算法》是计算机专业关键关键课程之一,在计算机专业学习过程中占有很关键地位。《数据结构和算法课程设计》就是要利用本课程和到现在为止相关课程中知识和技术来处理实际问题。尤其是面临非数值计算类型应用问题时,需要选择合适数据结构,设计出满足一定时间和空间限制有效算法。 本课程设计要求同学独立完成一个较为完整应用需求分析。并在设计和编写含有一定

2、规模程序过程中,深化对《数据结构和算法》课程中基础概念、理论和方法了解;训练综合利用所学知识处理实际问题能力,强化面向对象程序设计理念;使自己程序设计和调试水平有一个显著提升。 赫夫曼编码/译码器 1. 问题描述 利用赫夫曼编码进行通信能够大大提升信道利用率,缩短信息传输时间,降低传输成本。这要求在发送端经过一个编码系统对待传输数据预先编码,在接收端将传来数据进行译码(复原)。对于双工信道(即能够双向传输信息信道),每端全部需要一个完整编/译码系统。试为这么信息收发站编写一个赫夫曼码编/译码系统。 2. 基础要求 一个完整系统应含有以下功效: (1) I:初始化(Initiali

3、zation)。从终端读入字符集大小n,和n个字符和n个权值,建立赫夫曼树,并将它存于文件hfmTree中。 (2) E:编码(Encoding)。利用已建好赫夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中正文进行编码,然后将结果存入文件CodeFile中。 (3) D:译码(Decoding)。利用已建好赫夫曼树将文件CodeFile中代码进行译码,结果存入文件Textfile中。 以下为选做: (4) P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式编码文件写入文件CodePrin中。 (5

4、) T:印赫夫曼树(Tree printing)。将已在内存中赫夫曼树以直观方法(比如树)显示在终端上,同时将此字符形式赫夫曼树写入文件TreePrint 中。 3. 测试要求 (1) 已知某系统在通信联络中只可能出现八种字符,其频率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计赫夫曼编码。 (2) 用下表给出字符集和频度实际统计数据建立赫夫曼树,并实现以下报文编码和译码:“THIS PROGRAME IS MY FAVORITE”。 字符 A B C D E F G H I J K L M 频度

5、 186 64 13 22 32 103 21 15 47 57 1 5 32 20 字符 N O P Q R S T U V W X Y Z 频度 57 63 15 1 48 51 80 23 8 18 1 16 1 4. 实现提醒 (1) 编码结果以文本方法存放在文件Codefile中。 (2) 用户界面能够设计为“菜单”方法:显示上述功效符号,再加上“Q”,表示退出运行Quit。请用户键入一个选择功效符。此功效实施完成后再显示此菜单,直至某次用户选择了“Q”为止。 (3) 在程序一次实施过

6、程中,第一次实施I,D或C命令以后,赫夫曼树已经在内存了,无须再读入。每次实施中不一定实施I命令,因为文件hfmTree可能早已建好。 具体要求: 课程设计结果内容必需由以下四个部分组成,缺一不可。 (1) 上交源程序:学生根据试验题目标具体要求所开发全部源程序(应该放到一个文件夹中); (2) 上交程序说明文件:(保留在.txt中)在说明文档中应该写明上交程序所在目录,上交程序主程序文件名,假如需要安装,要有程序安装使用说明; (3) 设计汇报:(保留在word 文档中,文件名要求: 根据“姓名_学号_设计题目”起名,如文件名为“ 张三_XXX_赫夫曼编码 ”.doc。打印稿用A4

7、纸)。 其中包含: ¨ 题目; ¨ 试验目标; ¨ 需求分析:在该部分中叙述实现功效要求; ¨ 概要设计: 在此说明每个部分算法设计说明(能够是描述算法步骤图),每个程序中使用存放结构设计说明(假如指定存放结构请写出该存放结构定义); ¨ 具体设计 各个算法实现源程序,对每个题目要有对应源程序(能够是一组源程序,每个功效模块采取不一样函数实现)。源程序要根据写程序规则来编写。要结构清楚,关键函数关键变量,关键功效部分要加上清楚程序注释; ¨ 调试分析 测试数据,测试输出结果,时间复杂度分析,和每个模块设计和调试时存在问题思索(问题是哪些?问题怎样处理?),算法改善设想;

8、 ¨ 总结: 总结能够包含 : 设计过程收获、碰到问题及处理问题过程思索、程序调试能力思索、对数据结构这门课程思索、在设计过程中对《数据结构》课程认识等内容。 三、工作内容及工作计划:一周(20) 时间 地点 工作内容 指导老师 7月 11日 早晨 10-414 试验要求,需求分析; 孙麒、郭奕亿 下午 10-414 查找资料,总体结构设计; 孙麒、郭奕亿 7月 12日 早晨 10-414 算法设计、用户界面设计 孙麒、郭奕亿 下午 10-414 算法设计、用户界面设计 孙麒、郭奕亿 7月 13日 早晨 10-41

9、4 具体设计 孙麒、郭奕亿 下午 10-414 具体设计 孙麒、郭奕亿 7月 14日 早晨 10-414 具体设计 孙麒、郭奕亿 下午 10-414 具体设计 孙麒、郭奕亿 7月 15日 早晨 10-414 上机检验、答辩 孙麒、郭奕亿 下午 10-414 上机检验、答辩 孙麒、郭奕亿 四、考评成绩评定标准: 本课程设计评价由三部分组成,包含程序演示(50%),课程设计汇报(30%),回复老师提问(20%)。 1.程序演示: Ø 优 功效完善,全部测试正确,而且能够对局部进行完善。

10、Ø 良 功效完善,但测试欠缺。 Ø 中 功效基础完善,但程序还有部分错误。 Ø 及格 完成内存中赫夫曼编码/译码,但不包含文件操作。 Ø 不及格 功效不完善,且程序错误较多,无法运行。 2.课程设计汇报: Ø 优 包含设计内容,设计思想,已经完成任务及达成目标,设计思绪清楚、书写条理清楚,源程序结构合理、清楚,注释说明完整,有对此次课程设计心得体会。 Ø 良 包含设计内容,设计思想,已经完成任务及达成目标,设计思绪基础清楚、书写条理基础清楚,源程序结构合理、清楚,注释说明基础完整,有对此次课程设计心得体会。 Ø 中 课程设计汇报内容基础完整,思绪较清楚,书写基础清楚

11、源程序结构尚可,有注释说明但不完整。 Ø 及格 课程设计汇报内容基础完整,思绪较差,书写尚清楚。 Ø 不及格 课程设计汇报内容不完整,书写没有条理。 3.回复老师提问: Ø 优 能回复老师提出全部问题,并完全正确,思绪清楚 Ø 良 基础能回复老师提出全部问题,有些小错误 Ø 中 基础能回复老师提出问题,少数问题回复错误或不清楚 Ø 及格 能回复老师提出问题,但较多问题回复错误或不能回复 Ø 不及格 基础不能回复老师提出问题 《数据结构和算法》课程设计 目 录 一、 题目 二、 需求分析 三、 概要设计 四、 程序说明 五、 具体设计 六

12、 试验心得和体会 赫夫曼编\译码器 一、题目 问题描述 利用赫夫曼编码进行通信能够大大提升信道利用率,缩短信息传输时间,降低传输成本。这要求在发送端经过一个编码系统对待传输数据预先编码,在接收端将传来数据进行译码(复原)。对于双工信道(即能够双向传输信息信道),每端全部需要一个完整编/译码系统。试为这么信息收发站编写一个赫夫曼码编/译码系统。 基础要求 一个完整系统应含有以下功效: (1) I:初始化(Initialization)。从终端读入字符集大小n,和n个字符和n个权值,建立赫夫曼树,并将它存于文件hfmTree中。 (

13、2) E:编码(Encoding)。利用已建好赫夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中正文进行编码,然后将结果存入文件CodeFile中。 (3) D:译码(Decoding)。利用已建好赫夫曼树将文件CodeFile中代码进行译码,结果存入文件Textfile中。 (以下为选做:) (4) P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式编码文件写入文件CodePrin中。 (5) T:印赫夫曼树(Tree printing)。将已在内存中赫夫曼树以直观方法(比如树)显示在终端上,同时

14、将此字符形式赫夫曼树写入文件TreePrint 中。 测试要求 (1) 已知某系统在通信联络中只可能出现八种字符,其频率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计赫夫曼编码。 (2) 用下表给出字符集和频度实际统计数据建立赫夫曼树,并实现以下报文编码和译码:“THIS PROGRAME IS MY FAVORITE”。 字符 A B C D E F G H I J K L M 频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20

15、字符 N O P Q R S T U V W X Y Z 频度 57 63 15 1 48 51 80 23 8 18 1 16 1 二、需求分析 (1)初始化哈夫曼数 (2)输入字符保留至tobetran.txt中 (3)对字符编码 (4)编码结果以文本方法存放在文件Codefile中。 (5)在对codefile中编码进行译码 (6)打印编码和哈夫曼树 用户界面能够设计为“菜单”方法:显示上述功效符号,再加上“Q”,表示退出运行Quit。请用户键入一个选择功效符。此功效实施完成后再显示此菜单,直至某次

16、用户选择了“Q”为止。 在程序一次实施过程中,第一次实施I,D或C命令以后,赫夫曼树已经在内存了,无须再读入。每次实施中不一定实施I命令,因为文件hfmTree可能早已建好。 三、概要设计 函数间关系图3.1所表示: 主函数 显示表头 初始化树 输入字符 编码 译码 打印编码 打印赫夫曼树 选最小两个权值 Select() 图3.1 函数间关系 数据结构和算法设计 赫夫曼编\译码器关键功效是先建立赫夫曼树,然后利用建好赫夫曼树生成赫夫曼编码后进行译码 。 在数据通信中,常常需要将传送文字转换成由二进制字符0、1组成二进制串,称之为编码。结构一

17、棵赫夫曼树,要求赫夫曼树中左分之代表0,右分支代表1,则从根节点到每个叶子节点所经过路径分支组成0和1序列便为该节点对应字符编码,称之为赫夫曼编码。 最简单二进制编码方法是等长编码。若采取不等长编码,让出现频率高字符含有较短编码,让出现频率低字符含有较长编码,这么可能缩短传送电文总长度。赫夫曼树课用于结构使电文编码总长最短编码方案。 其关键步骤图图3.2所表示。 开始 结点数是否大于1 将data和权值赋给ht 输出根结点和权值 调用SELECT函数 计算根结点函数 父结点为两子结点之和 输出两子结点和已结构结点 是否为根结点? 左子是否为空? 此时编码为0 I

18、<2*N? I++ 编码为1 结束 否 否 否 右子是否为空 是 是 否 否 是 是 是 四、程序说明 1.赫夫曼树抽象数据类型定义 ADT HuffmanCoding{ 数据对象T:含有相同特征数据元素集合 数据关系R:满足最优二叉树关系 基础操作P: Init(&t) 操作结果:结构一个空赫夫曼树t。 encode() 操作结果:利用赫夫曼树进行编码 Decode() 操作结果:利用赫夫曼树进行译码 } 2. 主函数 Void mian() {打印表头; While(选择项不为q){ 输入选择项; Switch(

19、选择项) { Case i: 初始化;break; Case w: 输入要编码字符; break; Case e: 编码字符; break; Case d; 译码操作;break; Case p; 打印代码;break; Case t; 打印赫夫曼树; break; Default:输入错误,重新选择; } 五、具体设计 源程序: #include #include #include const int UINT_MAX=1000; typedef struct { int wei

20、ght; //权值 int parent,lchild,rchild; //父节点,左孩子结点,右孩子结点 }HTNode,* HuffmanTree; typedef char **HuffmanCode; //定义全局变量 HuffmanTree HT; //代表赫夫曼树 HuffmanCode HC; //代表赫夫曼编码 int *w,i,j,n; char *z; int flag=0; int numb=0; int min(HuffmanTre

21、e t,int i) {//选出叶子结点 int j,flag; int k=UINT_MAX; //取k为足够大值 for(j=1;j<=i;j++) if(t[j].weight

22、1,int &s2) {//排序两个叶子结点 int j; s1=min(t,i); s2=min(t,i); if(s1>s2) // s1为最小两个值中序号小那个 { j=s1; s1=s2; s2=j; } } void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n) {//w存放n个字符权值(

23、均>0),结构哈夫曼树HT并求出n个字符哈夫曼编码HC int m,i,s1,s2,start; int c,f; HuffmanTree p; char *cd; if(n<=1) return; m=2*n-1; //结点数 HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); // 0号单元未用 for(p=H

24、T+1,i=1;i<=n;++i,++p,++w) { p->weight=*w; p->parent=0; p->lchild=0; p->rchild=0; } for(;i<=m;++i,++p) p->parent=0; for(i=n+1;i<=m;++i) // 建赫夫曼树 { select(HT,i-1,s

25、1,s2); HT[s1].parent=HT[s2].parent=i; HT[i].lchild=s1; HT[i].rchild=s2; HT[i].weight=HT[s1].weight+HT[s2].weight; } HC=(HuffmanCode)malloc((n+1)*sizeof(char*)); cd=(char*)malloc(n*sizeof(char)); cd[

26、n-1]='\0'; //编码结束符 for(i=1;i<=n;i++) {//逐一字符求编码 start=n-1; for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent) // 从叶子到根逆向求编码 if(HT[f].lchild==c) cd[--start]='0';

27、 else cd[--start]='1'; HC[i]=(char*)malloc((n-start)*sizeof(char)); strcpy(HC[i],&cd[start]); //复制cd到HC } free(cd); } void InitHuffman() { //初始化赫夫曼链表 flag=1; int num; int n

28、um2; cout<<"赫夫曼链表初始化"<>num; n=num; w=(int*)malloc(n*sizeof(int));//分配权值空间 z=(char*)malloc(n*sizeof(char));//分配字符空间 cout<<"\n请依次输入"<

29、i+1<<":"<>num2; *(w+i)=num2; } //输入部分结束 编码 HuffmanCoding(HT,HC,w,n); cout<<"字符对应编码为:

30、"<

31、"))==NULL) { cout<<"文件打开失败"<

32、 } fprintf(htmTree,"\n");//换行 for(i=1;i<=n;i++) {//文件中输入编码 fputs(HC[i],htmTree); fputs(r,htmTree); } fclose(htmTree); }//init //获取字符并写入文件创建待编码文件 void inputcode() { FILE *virttran,*tobetran; char str; if((tobetran=fope

33、n("tobetran.txt","w"))==NULL) { cout<<"不能打开文件"<

34、 {//完成编码功效 cout<<"下面对目录下文件tobetran.txt中字符进行编码"<

35、NULL) { cout<<"不能打开文件"<

36、 cout<<"不能打开文件"<

37、1)==*(tran+i)) { fputs(HC[j],codefile); puts(HC[j]); if(j>n) { cout<<"字符错误,无法编码!"<

38、 break; } } } } } cout<<"完成!"<

39、e() {//完成译码功效 cout<<"下面对根目录下文件codefile.txt中字符进行译码"<

40、 { cout<<"不能打开文件"<

41、); //分配空间 m=2*n-1; for(i=0;*(tbdc+i)!='\0';i++) //进入循环依次译码 { i2=*(tbdc+i); if(HT[m].lchild==0) { *(outext+io)=*(z+m-1); io++; m=2*n-1; i--; } else if(i2=='0') m=HT[m].lchild; else if(i2=='1') m=HT[m].rchild; } *(outext+io)=*(z+m-1); *

42、outext+io+1)='\0'; fputs(outext,txtfile);//译码完成将译码放入文件 cout<<"完成!"<

43、\n"; FILE * CodePrin,* codefile; if((CodePrin=fopen("CodePrin.txt","w"))==NULL) { cout<<"不能打开文件"<

44、 { cout<<"不能打开文件"<

45、 } fputs(work3,CodePrin);//放入 puts(work3); }while(strlen(work3)==50); free(work3); cout<<"打印完成!"<

46、char t=' '; if(start!=HT) { FILE * TreePrint; if((TreePrint=fopen("TreePrint.txt","a"))==NULL) { cout<<"创建文件失败"<rchild,HT); if(start->lchild&&start->rchild) t='<';

47、 cout<weight<weight); coprint(HT+start->lchild,HT); numb--; fclose(TreePrint); } } void printree(HuffmanTree HT,int w) //打印赫夫曼树 { HuffmanTree p; p=HT+w;

48、 cout<<"打印赫夫曼树"<

49、 \n\t\t"; cout<<"   w.输入字符保留在对应文件中   \n\t\t"; cout<<"    e.编 码        \n\t\t"; cout<<"    d.译 码       \n\t\t"; cout<<"    p.打印编码        \n\t\t"; cout<<"    t.打印赫夫曼树  \n\t\t"; cout<<"    q.退 出      

50、 \n\t\t"; cout<>choice; switch(choice) { case 'i':

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服