数据结构与算法设计任务书

合集下载

数据结构与算法任务书-总论

数据结构与算法任务书-总论

算法与数据结构课程设计任务书(2014级软件工程本科专业)题目类型:软件工程(R)指导教师:李睿一.题目简介1.扫雷问题。

有些个人计算机会带有一个名为Minesweeper的游戏。

该游戏界面是一个网格,网格中的有些方块是雷。

编写一个程序以读取文件,该文件中存放着网格中的行数、列数以及网格本身。

网格会含有一些标记为o的方块,这些就是雷。

其他方块不是雷,将会标记上问号(?)。

程序的输出就是输出这个网格。

雷依然会标记成o,而那些不含雷的方块会替换成一个数字,以表明邻近雷的个数。

最大数字将是8。

(4)例如:1 5 52?o??? 2 2o2113o??o? 3 o33o24??o?o 4 34o4o5oo?o? 5 oo4o26?o??? 6 3o3112.求素数问题。

埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法。

从建立一个整数2~N的表着手,寻找i˂错误!未找到引用源。

的整数,编程实现此算法,并讨论运算时间。

(1)3.方程求解问题。

方程A5+B5+C5+D5+E5=F5刚好有一个满足0≤A≤B≤C≤D≤E≤F≤75的整数解。

请编写一个求出该解的程序。

(3)4.最短字符串问题。

编写一个程序,从输入中读取字符串,并按长度顺序,最短字符串优先的原则输出它们。

如果有若干字符串具有相同的长度,就按字母顺序输出它们。

(3)5.计算1的个数问题。

编写递归程序,返回十进制数N的二进制表示中1的个数。

(2)6.排序重构问题。

令A为一个由N个已特殊排序数组成的数列:A1,A2,…,A N,其中A1=0。

令B为N(N-1)/2个数(定义为B ij=A i-A j(i>j))组成的数列。

例如,A=0,1,5,8,那么D=1,3,4,5,7,8。

请完成:1)编写程序,根据A构造D;2)编写程序,构造与D相对应的某一个数列A,注意A不是唯一的。

(4)7.占用网格计算问题。

考虑一个N*N的网格,其中某些方格已被占用。

《数据结构与算法实验》任务书

《数据结构与算法实验》任务书

《数据结构与算法实验》任务书《数据结构与算法实验》任务书实验一动态链表的设计与应用一、实验目的、要求1、掌握使用VC 6.0上机调试线性表的基本方法;2、掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算。

二、实验内容1.输入一组学生信息,建立一个单链表。

2.遍历该链表,输出学生信息。

3.查找某特定的学生,查找成功返回1,否则返回0。

4.编写在非递减有序链表中插入一个元素使链表元素仍有序的函数,并利用该函数建立一个非递减有序单向链表。

5.利用算法4建立两个非递减有序单向链表,然后合并成一个非递增链表。

*6.采用单向链表实现一元多项式的存储并实现两个多项式相加并输出结果。

7.编写一个主函数,调试上述算法。

*8.综合训练:利用链表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等,并能够实现将数据存储到文件中)三、实验说明1.存储定义#define MAXSIZE 100 //表中元素的最大个数typedef int ElemType;//元素类型typedef struct list{ElemType elem[MAXSIZE];//静态线性表int length; //表的实际长度}SqList;//顺序表的类型名2.建立顺序表时可利用随机函数自动产生数据。

四、注意问题1.插入、删除时元素的移动原因、方向及先后顺序。

2.了解不同的函数形参与实参的传递关系。

一、实验目的、要求1.掌握栈、队列的思想及其存储实现。

2.掌握栈、队列的常见算法的程序实现。

二、实验内容1.采用链式存储实现栈的初始化、入栈、出栈操作。

2.采用顺序存储实现栈的初始化、入栈、出栈操作。

3.采用链式存储实现队列的初始化、入队、出队操作。

4.采用顺序存储实现循环队列的初始化、入队、出队操作。

5.在主函数中设计一个简单的菜单,分别测试上述算法。

*6.综合训练:1)利用栈实现表达式求值算法。

数据结构与算法课程设计教学任务书

数据结构与算法课程设计教学任务书

《数据结构与算法》课程设计教学任务书一、课程设计的目的数据结构与算法课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。

数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。

学习数据结构与算法是为了将实际问题中涉及的对象在计算机中表示出来并对它们进行处理。

通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。

通过此次课程设计主要达到以下目的:了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

二、课程设计的基本要求1. 独立思考,独立完成:课程设计中各任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝。

2. 做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。

3. 按照课程设计的具体要求建立功能模块,要求按照如下几个内容认真完成:1)需求分析:在该部分中叙述,所选课题的功能要求。

2)概要设计:在此说明所选课题的功能模块,以及每个功能模块的算法设计(可以是描述算法的功能模块图),所选课题的的数据结构以及其存储结构设计说明等。

(如果指定存储结构请写出该存储结构的定义)3)详细设计:针对2)中的主要功能模块,画出流程图,给出主要功能模块的流程图、算法及必要的文字说明)4)编码实现:给出3)中主要功能模块的函数实现,重点是函数的声明,变量或参数的说明,以及程序的功能说明与注释,不必把所有代码都写上,主要写出其声明与注释等。

数据结构与算法课程设计计划书-2014-2015-1(13级)

数据结构与算法课程设计计划书-2014-2015-1(13级)

计算机科学与工程学院集中性实践教学计划书( 2014-2015 学年第一学期)课程名称:数据结构与算法课程设计专业:计算机科学与技术软件工程、网络工程班级:计算机科学与技术131-6软件工程131-4网络工程131-4课程负责人:李锡祚指导教师分配情况:专业指导教师计算机科学与技术孟佳娜(1班) 张恒博(2班) 王巍(3班) 刘爽(4班) 李威(5班) 李笑牛(6班)软件工程王玲芬(1班) 赵丹丹(2班) 王存睿(3班) 宋海玉(4班) 网络工程王晓强(1班) 郭海(2班) 于艳莉(3班) 王波(4班)教学起止周:第17 至19 教学周一、教学目的:使学生能够根据数据对象的特性,合理的组织数据并能综合运用数据结构与算法基本知识和程序设计基本知识解决实际问题,培养基本的、良好的程序设计技能。

二、主要阶段、内容、时间及地点安排(以天为单位计):1、阶段与内容第1阶段(17周,校企合作指导)在为期一周校企合作模式的训练中,让学生对数据结构有一定的掌握,熟悉数据结构的常用算法并灵活运用,熟练使用开发工具,简单了解开发流程和团队协作的开发模式,并充分认识到数据结构在以后实际的项目开发中的重要作用。

(具体流程见企业实训计划书)第2阶段:(18-19周,校内教师指导)通过为期二周的课程设计集中训练, 使学生能够根据数据对象的特性,合理的组织数据并能综合运用数据结构与算法基本知识和程序设计基本知识解决实际问题。

1. 指导教师布置设计任务并解析有关题目的设计指标和任务的具体内容,学生选择题目,明确问题描述和要求,查阅资料(要求:各班长或学习委员将本班的选题表交给辅导教师,一人一题,每道题的选择人数原则上不能超过3人,第一天课程设计结束后,每名学生都要确定题目)(1天)。

2. 明确题目要求、确定数据结构、设计算法,编写程序、调试程序、测试程序(7天)(要求:准备足够的测试数据,对软件进行测试与调试。

)。

3. 验收与答辩(上机演示,回答教师提问)(1天);4. 撰写课程设计报告(1天)。

数据结构与算法课程设计任务书

数据结构与算法课程设计任务书

数据结构与算法课程设计任务书使用时间:2011-2012学年第2学期一、课程设计目的本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。

二、课程设计题目共10题,每个学生一题,单独完成。

(选法为根据学生所在班级名册的自然顺序,第1-12名同学分别做第1到第12题,然后循环,第13-24名同学分别做第1到第12题,依次类推。

)1、银行业务活动的模拟任务:假设某银行有4个窗口对外接待客户,从早晨银行开门起不断有客户进入银行,由于每个窗口在某个时刻只能接待一个客户。

因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进入银行的客户。

如果某个窗口的业务员正空闲,则可上前输业务。

反之,若个窗口均有客户所占,他便会排在为数最少的队伍后面。

编制一个程序模拟银行的这种业务活动并计算一天中客户在银行的平均逗留时间。

功能要求:1).实现数据的输入;2).各个窗口数据的访问和输出;3)当前窗口的人员分布情况动态显示。

界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

存储结构:学生自己根据系统功能要求自己设计。

请在最后的上交资料中指明你用到的存储结构;测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。

进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明;2、航班订票系统任务:通过此系统可以实现如下功能:1)、录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2)、查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3)、订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4)、退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

自-《数据结构》课程设计任务书 10-11-2

自-《数据结构》课程设计任务书 10-11-2

南京工程学院
课程设计任务书
课程名称数据结构
院(系、部、中心) 计算机工程学院
专业计算机科学与技术班级
起止日期
指导教师叶核亚
1、叶核亚编著.数据结构(C++版)(第2版). 北京:电子工业出版社,2009
2、严蔚敏等编著. 数据结构及应用算法教程. 北京:清华大学出版社,2001
3、殷人昆等编著.数据结构(用面向对象方法与C++描述)(第2版). 北京:清华
大学出版社,2007
4、张乃孝编著. 算法与数据结构——C语言描述(第2版).北京:高等教育出版
社,2002
5、许卓群等. 数据结构与算法.北京:高等教育出版社,2004
5.课程设计进度安排
起止日期工作内容
设计前二周设计周,周一周二~周四周五
设计周之后教师提出课题范围及要求,学生查阅资料,确定选题。

学生写程序草稿、运行。

教师审查验收;学生修改并完善程序,测试多种运行结果。

学生撰写设计报告。

教师验证学生程序,批改设计报告。

6.成绩考核办法
根据程序功能、运行情况和课程设计报告为依据进行考核。

成绩按分优、良、中、及格和不及格五级计分,或百分制计分。

数据结构课程设计任务书

数据结构课程设计任务书

数据结构与算法课程设计任务书1.课程设计考核要求设计要求每位同学都必须独立完成课程设计内容。

支持借鉴和学习已有的优秀知识。

反对全盘拷贝,不求甚解。

吸收和消化他人经验,做自己的课程设计。

自学能力的培养:学会上网查资料、解决问题。

考核方法第一部分(20%):平时成绩第一部分(50%):实物演示演示完成的系统,并回答老师的问题。

第二部分(30%):报告提交1 课程设计报告,内容包括参考文献分析、方案设计、程序清单(附注释)、调试记录(碰到的问题和解决方案)以及课程设计心得。

报告封面和模板参见附录。

2.课程设计进度表附1 对课程设计提交内容的要求(1)请同学独立完成报告,若发现两份报告一模一样,则两人都记为不及格,请各位同学珍惜自己的版权。

(2)课程设计报告用A4纸打印,在左侧面装订,报告内容不得少于15页。

(3)提交材料:1、课程设计报告的打印件,装订好,第16周课题验收时提交;2、压缩文件起名为:学号.rar。

该压缩文件中包含下列几个文件:程序设计报告的电子文档、源程序文件、原始数据文件、编译链接后得到的可执行文件。

班长于第16周周日之前提交所有同学的压缩文件。

附2课程设计上机安排表2017年5月27日第二-五节课上午8:50-12:152015年6月1日第二-九节课上午8:50-12:15,下午1:45-5:102017年6月2日第六-九节课下午1:45-5:102017年6月3日第二-五节课上午8:50-12:15实物验收:6月13日下午附3成绩的评定根据上机出勤情况、为上机所作的准备情况、上机时的表现、程序的完成情况、报告的完成情况、验收答辩时的表现等综合打分。

等级为:优秀、良好、中等、及格、不及格。

附4 课程设计报告封面课程设计报告( / 学年第学期)题目:专业学生姓名班级学号指导教师指导单位日期附5课程设计报告模板课题题目(题目格式:宋体,3号,加粗,居中对齐)一、课题内容和要求(格式:宋体,4号,加粗,两端对齐)该部分可参考前面给出的问题描述再加以细化一些(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)二、需求分析(格式:宋体,4号,加粗,两端对齐)在该部分中叙述每个模块的功能要求(正文格式:宋体,小4号,不加粗,两端对齐,1.5倍行距)三、概要设计(格式:宋体,4号,加粗,两端对齐)在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义,如果用面向对象的方法,应该给出类中成员变量和成员函数原型声明)。

数据结构与算法课程设计教学任务书

数据结构与算法课程设计教学任务书

《数据结构与算法》课程设计教学任务书一、课程设计的目的数据结构与算法课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。

数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。

学习数据结构与算法是为了将实际问题中涉及的对象在计算机中表示出来并对它们进行处理。

通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。

通过此次课程设计主要达到以下目的:了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

二、课程设计的基本要求1. 独立思考,独立完成:课程设计中各任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝。

2. 做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。

3. 按照课程设计的具体要求建立功能模块,要求按照如下几个内容认真完成:1)需求分析:在该部分中叙述,所选课题的功能要求。

2)概要设计:在此说明所选课题的功能模块,以及每个功能模块的算法设计(可以是描述算法的功能模块图),所选课题的的数据结构以及其存储结构设计说明等。

(如果指定存储结构请写出该存储结构的定义)3)详细设计:针对2)中的主要功能模块,画出流程图,给出主要功能模块的流程图、算法及必要的文字说明)4)编码实现:给出3)中主要功能模块的函数实现,重点是函数的声明,变量或参数的说明,以及程序的功能说明与注释,不必把所有代码都写上,主要写出其声明与注释等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:数据结构与算法课程设计任务书(一)目的和意义课程设计是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有重要的意义。

学好数据结构对掌握实际编程能力很有帮助。

为了学好《数据结构》,必须掌握编写一些在特定数据结构上的算法,并通过上机调试,更好地掌握各种数据结构及其特点,《数据结构》课程设计正是根据这种需要而设置的。

本课程设计应达到以下教学目的:1.使学生对于数据结构基本理论和存储结构及算法设计有更加深入的理解;2.提高学生在实际设计操作中系统分析、结构确定、算法选择、数学建模和信息加工的能力;3.训练综合运用所学知识处理实际问题的能力;使同学的程序设计与调试水平有一个明显的提高,提高学生的C/C++语言程序设计能力。

(二)、选题要求选题要符合本课程的教学要求,课程设计所安排的题目,在难度和深度方面都大于课内的上机训练,成果宜具有相对完整功能。

本课程设计要求学生完成典型问题的数据结构确立和程序实现。

整个数据结构的课设历时一周。

(三)、任务及要求1. 任务------赫夫曼编码/译码器利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。

这要求在发送端通过一个编码系统对待传输预先编码,在接收端将传来的数据进行译码。

对于双工通道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。

本课程设计实现这样的信息收发站,编写一个哈夫曼码的编/译码系统。

2. 要求一个完整的系统应具有以下功能:1) 初始化。

从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree.txt中。

2) 编码。

利用已建好的哈夫曼树,对文件ToBeTra.txt中的正文进行编码,然后将结果存入文件CodeFil.txt中。

3) 译码。

利用已建好的哈夫曼树将文件CodeFile.txt中的代码进行译码,结果存入文件Textfile.txt中。

4) 印哈夫曼树(Treeprinting).将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint.txt 中。

3. 测试要求(1) 已知某系统在通信联络中只可能出现八种字符,其频率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计哈夫曼编码。

(2) 用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:“THIS PROGRAME IS MY FA VORITE”。

体会该实验的思想理念还是蛮先进的,关键的大多数核心算法也可以直接使用,在理解的基础上修改的路线是清晰的。

在实验过程中碰到的问题,都是和语法相关的,现在总结如下:a) 一开始编写select()函数就碰到很多问题。

因为考虑到效率,首先想到的是冒泡排序。

只要2次冒泡就刚好可以传出2个数值。

但是下下标的顺序也要同时换位置,也就是增加一个辅助数组。

然后实现后发现结果错误,发现HT 为全局变量,这样了话会导致一系列的变化破坏了数据结构,于是还是采用选择排序,直接比较2个循环,找出s1和s2,过程中添加flag标志域判断是否选中,这样就可以了。

b) 但是用直接选取的时候又发现问题了,因为我的s1 s2默认为1的,所以生成的树HT表出现问题了,具体就是不是唯一根结点。

突然发现原来只要权植大于1的结点都有问题,都不会被遍历到。

于是不初始化S1和S2变量。

采用申明finds 函数判断是否找到,每次都重新找,这样就不会有盲点了。

c) 最令人头疼的是文件操作,第一个问题折腾了很久就是FILE指针只有close 的时候才会刷新实际文件。

d) 还有就是字符串的表示的问题,这个绝对是经典的问题,大一的时候都撞墙好几次了。

困恼了很久!在txt()函数的时候,出现个问题,就是输入要等到下一回,不知道怎么回事.花了1个多小时都没看出来。

后来怀疑是一开始时候回车没吸收。

源代码:#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct{char info;unsigned int weight;unsigned int parent, lchild, rchild;}HTNode,*HuffmanTree;typedef char **HuffmanCode;int n,m,w[27]={184,64,13,22,32,103,21,15,47,57,1,5,32,20,57,63,15,1,48,51,80,23,8,18,1,16,1}; int flag[54];char *info=" ABCDEFGHIJKLMNOPQRSTUVWXYZ";HuffmanTree HT;HuffmanCode HC;void Select(HuffmanTree HT, int j,int &s1,int &s2){ //1到j!!选择双亲节点为0,并且最小的两个子叶节点int b,finds=0;// s1=1;s2=1;for(b=1;b<=j;b++){if(flag[b]==2&&finds==0) {s1=b;finds=1;}else if(HT[b].weight<HT[s1].weight&&flag[b]==2){s1=b;}}finds=0;flag[s1]=3;for(b=1;b<=j;b++){if(flag[b]==2&&finds==0){s2=b;finds=1;}else if(HT[b].weight<HT[s2].weight&&flag[b]==2){s2=b;}}flag[s2]=3;}void HuffmanCoding(HuffmanTree &HT, int w[], int n,char *info) {// 算法6.12FILE *fp;int i, j, s1, s2, start;char *cd;unsigned int c, f;for(i=0;i<54;i++){flag[i]=2;}if (n<=1) return;m = 2 * n - 1;HT = (HuffmanTree)malloc((m+1) * sizeof(HTNode));//0号单元未用for (i=1; i<=n; i++) {HT[i].weight=w[i-1];HT[i].info=info[i-1];HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;}for (i=n+1; i<=m; i++) {HT[i].weight=0;HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;}printf("\n哈夫曼树的构造过程如下所示:\n");//printf("HT初态:\n 结点weight parent lchild rchild"); // for (i=1; i<=m; i++)// printf("\n%4d%8d%8d%8d%8d",i,HT[i].weight,// HT[i].parent,HT[i].lchild, HT[i].rchild);for (i=n+1; i<=m; i++) {Select(HT, i-1, s1, s2);HT[s1].parent = i; HT[s2].parent = i;HT[i].lchild = s1; HT[i].rchild = s2;HT[i].weight = HT[s1].weight + HT[s2].weight;//printf("\nselect: s1=%d s2=%d\n", s1, s2);// printf(" 结点weight parent lchild rchild");//for (j=1; j<=i; j++)// printf("\n%4d%8d%8d%8d%8d",j,HT[j].weight,// HT[j].parent,HT[j].lchild, HT[j].rchild);//printf("\n按任意键,继续...");//getchar();}printf("\n 结点weight parent lchild rchild");for (j=1; j<=i-1; j++)printf("\n%4d%8d%8d%8d%8d",j,HT[j].weight,HT[j].parent,HT[j].lchild, HT[j].rchild);fp=fopen("hfmTree.txt","w+");for(j=1;j<=m;j++){if(fp!=NULL)fprintf( fp, "%4d%8d%8d%8d%8d\n",j,HT[j].weight,HT[j].parent,HT[j].lchild, HT[j].rchild);}printf("\nhfmTree has been saved in the file hfmTree.txt!\n");fclose(fp);//printf("\n以下是HC 表:\n");//getchar();//--- 从叶子到根逆向求每个字符的哈夫曼编码---HC=(HuffmanCode)malloc((n+1)*sizeof(char *));cd = (char *)malloc(n*sizeof(char));cd[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';else cd[--start] = '1';HC[i] = (char *)malloc((n-start)*sizeof(char));strcpy(HC[i], &cd[start]);}// display HC/*for (i=1;i<=n;i++){printf(" ");puts(HC[i]);} */free(cd); } // HuffmanCodingvoid CheckCoding(){// 将ToBeTra中的正文进行译码并存入CodeFileFILE *fp1,*fp2;int ab;char c;char str[100];fp1=fopen("ToBeTra.txt","r") ;fp2=fopen("CodeFile.txt","w+");if(fp1==NULL||fp2==NULL){printf("cannot open or create these files!\n");}else {c=fgetc(fp1);//按字符位置来一个个编码while(c!=EOF){if(c==' ') ab=1;else ab=c-63;strcpy(str,HC[ab]);fputs(str,fp2);c=fgetc(fp1);}printf("CodeFile has been saved in the file CodeFile.txt\n");}fclose(fp1);fclose(fp2);}void HuffmanTranslate(){ //将CodeFile中的代码进行译码并存入Textfile FILE *fp1,*fp2;int key;char c,cc;char str[1000];fp1=fopen("CodeFile.txt","r");fp2=fopen("TextFile.txt","w+");if(fp1==NULL||fp2==NULL)printf("no file to translate!");else{c=fgetc(fp1);while(c!=EOF){//遍历树key=m;while(HT[key].lchild!=0&&HT[key].rchild!=0){if(c=='0')key=HT[key].lchild;else key=HT[key].rchild;c=fgetc(fp1);}//最后为所指向的位置.cc=info[key-1];fprintf(fp2,"%c",cc);}}fclose(fp1);fclose(fp2);}int txt(){FILE *fp;char s[100];if((fp=fopen("ToBeTra.txt","w+"))==NULL)printf("ToBeTra.txt cant be created! \n");///else{printf("please in put a txt,it will be save in the file ToBeTra.txt:\n"); gets(s);if(fputs(s,fp)!=NULL)printf("\nOK\n");}fclose(fp);return 0;}//text function is ended;main(){int op,a;char *str=" ABCDEFGHIJKLMNOPQRSTUVWXYZ";while(1){printf("---------------------------------------------\n");printf(" 赫夫曼编码和译码\n");printf(" 1.初始化\n");printf(" 2.输入对应的正文内容\n") ;printf(" 3.进行赫夫曼编码\n");printf(" 4.进行赫夫曼译码\n") ;printf(" 5.退出赫夫曼操作\n");printf(" 请输入1.2.3.4.5 \n");printf(" ---------------------------------------------\n");//---scanf("%d",&op);getchar();switch(op){case 1 :HuffmanCoding(HT,w,27,str);break;case 2 :if(txt()==0) printf("OK\n");break;case 3 :CheckCoding();printf("OK\n");break;case 4 :HuffmanTranslate();break;case 5 :exit(0);break;}}}。

相关文档
最新文档