数据结构与算法设计任务书
- 格式:doc
- 大小:42.50 KB
- 文档页数:8
算法与数据结构课程设计任务书(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 学年第一学期)课程名称:数据结构与算法课程设计专业:计算机科学与技术软件工程、网络工程班级:计算机科学与技术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)、退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
南京工程学院
课程设计任务书
课程名称数据结构
院(系、部、中心) 计算机工程学院
专业计算机科学与技术班级
起止日期
指导教师叶核亚
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)中主要功能模块的函数实现,重点是函数的声明,变量或参数的说明,以及程序的功能说明与注释,不必把所有代码都写上,主要写出其声明与注释等。
《数据结构与算法分析课程设计》任务书2012版任务书一、任务背景数据结构与算法是计算机科学与技术专业的重要课程之一,旨在培养学生分析和解决复杂问题的能力。
本课程设计主要通过一个真实案例,让学生深入理解数据结构与算法的应用,并能够独立完成相应的设计和开发任务。
二、任务目标1. 掌握数据结构与算法的基本概念和原理。
2. 能够分析问题需求,设计合适的数据结构与算法解决方案。
3. 能够独立完成课程设计,并能进行有效的测试和调试。
三、任务要求1. 学生根据给定的案例,自行选择实现语言和开发环境。
2. 实现一个能够对输入的数据进行处理的程序,要求程序能够正确处理各种边界情况。
3. 程序设计要求使用合理的数据结构和算法,保证程序的运行效率和资源利用率。
4. 程序要求具备良好的用户界面,可以直观地显示程序的运行结果。
5. 程序应回归测试要求覆盖到各种情况,并能够快速定位和修复问题。
6. 学生需要在规定的时间内完成程序设计,并进行提交和展示。
四、任务安排1. 学生在完成任务前需要对数据结构与算法的相关知识进行系统学习。
2. 学生需在规定时间内完成项目的需求分析和整体设计。
3. 学生需按照设计要求进行程序的开发和功能测试。
4. 学生需要撰写完整的设计文档和用户手册,并进行提交。
5. 学生需按时进行项目的汇报和展示。
五、任务考核1. 根据学生提交的设计文档和用户手册进行初步评估。
2. 进行功能和性能测试,评估程序的稳定性和可靠性。
3. 根据学生的汇报和展示内容进行最终评定。
4. 综合考虑学生的完成情况和表现,给予相应的得分和评价。
六、参考要求1. 参考书目:《算法导论》、《数据结构与算法分析》等。
2. 参考案例:从现实生活中选取一个相关案例,如银行排队系统、图书管理系统等。
七、附件附件1:数据结构与算法课程设计案例(具体案例请参考附件1)八、备注任务书的内容根据2012版的数据结构与算法分析课程设计要求编写,要求学生完成相应的设计和开发任务。
数据结构与算法课程设计任务书一、目的和意义课程设计是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有重要的意义。
学好数据结构对掌握实际编程能力很有帮助。
为了学好《数据结构》,必须掌握编写一些在特定数据结构上的算法,并通过上机调试,更好地掌握各种数据结构及其特点,《数据结构》课程设计正是根据这种需要而设置的。
本课程设计应达到以下教学目的:1.使学生对于数据结构基本理论和存储结构及算法设计有更加深入的理解;2.提高学生在实际设计操作中系统分析、结构确定、算法选择、数学建模和信息加工的能力;3.训练综合运用所学知识处理实际问题的能力;使同学的程序设计与调试水平有一个明显的提高,提高学生的C/C++语言程序设计能力。
二、选题要求选题要符合本课程的教学要求,课程设计所安排的题目,在难度和深度方面都大于课内的上机训练,成果宜具有相对完整功能。
本课程设计要求学生完成典型问题的数据结构确立和程序实现。
整个数据结构的课设历时一周。
三、任务及要求1.任务------赫夫曼编码/译码器利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。
这要求在发送端通过一个编码系统对待传输预先编码,在接收端将传来的数据进行译码。
对于双工通道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。
本课程设计实现这样的信息收发站,编写一个哈夫曼码的编/译码系统。
2.要求一个完整的系统应具有以下功能:1)初始化。
从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree.txt中。
2)编码。
利用已建好的哈夫曼树,对文件ToBeTra.txt中的正文进行编码,然后将结果存入文件CodeFil.txt中。
3)译码。
利用已建好的哈夫曼树将文件CodeFile.txt中的代码进行译码,结果存入文件Textfile.txt中。
数据结构与算法课程设计任务书一.数据结构与算法课程设计的目的和要求(一)设计的目的数据结构与算法课程设计是在学完数据结构与算法课程之后的实践教学环节。
该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。
要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。
学生通过数据结构课程设计在下述各方面得到锻炼:1.能根据实际问题的具体情况,结合数据结构与算法课程中的基本理论和基本算法,正确分析出数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。
2.提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
3.培养算法分析能力。
分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
(二)设计要求1.学生必须仔细阅读《数据结构与算法》课程设计方案,认真主动完成课设的要求。
有问题及时主动通过各种方式与教师联系沟通。
2.学生要发挥自主学习的能力,充分利用时间,并在课设过程中不断检测自己的计划完成情况,及时向教师汇报。
3.课程设计按照教学要求需要一周时间完成,属教师安排上机时间学生不得缺席。
二.设计内容及步骤1.分析问题,给出数学模型,设计相应的数据结构。
(1)分析问题的特点,用数学表达式或其它形式描述其数学模型。
(2)选择能够体现问题本身特点的逻辑结构。
(3)在逻辑结构确定的情况下,为算法的设计选择相应的存储结构,顺序存储结构和非顺序存储结构的不同存储方式,其对应的算法也不相同。
2.算法设计在已经选择好数据结构的前提下,为解决问题设计算法。
(1)确定所需模块对于稍复杂的程序设计,要充分利用模块化程序设计方法,自顶向下,逐步细化,在整体思路确定的情况下,考虑所需模块数,各模块完成功能以及模块之间的数据联系和调用关系。
(2)各子模块功能描述给出主要模块的算法描述,用流程图或伪代码表示。
数据结构与算法课程设计任务书一、课程设计目的数据结构与算法课程设计是一门重要的实践教学环节,其目的在于加深学生对数据结构和算法基本概念的理解,培养学生运用所学知识解决实际问题的能力,提高学生的编程技能和创新思维。
通过课程设计,学生将能够更加熟练地掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、查找、递归、贪心、动态规划等),并将其应用到实际的程序设计中。
二、课程设计要求1、学生需独立完成课程设计任务,不得抄袭他人成果。
2、课程设计的题目应具有一定的综合性和挑战性,能够涵盖所学的数据结构和算法知识。
3、学生在设计过程中应注重程序的正确性、可读性和可维护性,合理选择数据结构和算法,优化程序性能。
4、学生需按照规定的格式撰写课程设计报告,报告内容应包括问题描述、算法设计、程序实现、测试结果及分析等。
三、课程设计题目题目 1:学生成绩管理系统设计一个学生成绩管理系统,能够实现以下功能:1、录入学生的基本信息(学号、姓名、课程名称、成绩)。
2、按照学号、课程名称等关键字进行查找和排序。
3、计算每个学生的平均成绩,并按照平均成绩进行排序。
4、统计每门课程的不及格人数和优秀人数(85 分及以上为优秀)。
题目 2:公交线路查询系统设计一个公交线路查询系统,能够实现以下功能:1、录入公交线路的起点、终点、途经站点等信息。
2、根据用户输入的起点和终点,查询可行的公交线路。
3、考虑换乘情况,给出最优的公交线路方案(换乘次数最少、行程时间最短等)。
题目 3:文本文件处理系统设计一个文本文件处理系统,能够实现以下功能:1、读取文本文件,并将文件中的内容存储到合适的数据结构中。
2、统计文件中单词的出现频率,并按照频率降序排列。
3、查找指定的单词或字符串在文件中的位置。
4、对文件内容进行加密和解密操作。
题目 4:迷宫求解系统设计一个迷宫求解系统,能够实现以下功能:1、生成一个随机的迷宫。
2、采用深度优先搜索或广度优先搜索算法求解迷宫的路径。
2014/2015学年第一学期《数据结构与算法课程设计》任务书一、课程设计目的数据结构与算法课程设计是《数据结构与算法》课程教学必不可缺的一个重要环节,它可加深学生对该课程所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。
通过课程设计,能够提高学生分析问题、解决问题,从而运用所学知识解决实际问题的能力,因而必须给予足够的重视。
2二、课程设计题目2.1 棋盘覆盖【间题描述】在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。
在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。
【基本要求】(1)输入k以及特殊方格所在的行号dr和特殊方格的列号dc。
(2)要求输出每一步用什么形态L型骨牌覆盖,覆盖后得到的棋盘图形。
(3)如果输出的结果只是用矩阵表示则为良好,用图形表示则为优。
【测试数据】【实现提示】使用分治策略,把棋盘划分成4个小棋盘,然后用一个L型骨牌覆盖将这4个小棋盘变为都具有特殊方格的棋盘。
2.2 Hanoi塔问题(*)【问题描述】设a,b,c是三个塔座。
开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠放在一起,各圆盘从小到大编号为1,2,…,n,要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置。
在移动圆盘时应遵守以下移动规则:规则(1)每次只能移动一个圆盘;规则(2)任何时刻都部允许将较大的圆盘压在较小的圆盘之上;规则(3)在满足移动规则(1)和(2)的前提下,可将圆盘移至a,b,c中任一塔座上。
【基本要求】(1)设计出Hannoi塔游戏,供用户玩;(2)提供正确的搬运方法。
【实现说明】正确的搬运方法使用递归方法实现。
【测试数据】2.3 矩阵连乘问题【问题描述】给定n 个矩阵{12,,...,n A A A },其中i A 和1i A 是可乘的,i =1,2,…,n-1。
课程设计任务书
课程名称:数据结构与算法课程设计
设计题目:交通咨询系统
问题描述:
设计一个交通咨询系统,为自驾游旅行者客咨询从任一个城市到另一个城市之间的最短路径问题。
设计分三个部分,一是建立交通网络图的存储结构;二是解决单源最短路径问题;最后再实现两个城市顶点之间的最短路径问题。
基本要求:
1 对城市信息(城市名、城市间的里程)进行编辑:具备添加、修改、删除功能;
2 咨询以用户和计算机对话方式进行,要注意人机交互的屏幕界面。
由用户选择输入起点、终点,输出信息:旅行者从起点、终点经过的每一座城市。
3.主程序可以有系统界面、菜单;也可用命令提示方式;选择功能模块执行,要求在程序运行过程中可以反复操作。
测试数据:
参考《数据结构(C语言版)》(严蔚敏吴伟民编著)7.6节图7.33的交通图。
答辩测试数据:北京到乌鲁木齐;北京到昆明;广州到哈尔滨;乌鲁木齐到南昌;沈阳到昆明。
选作内容:
考虑由于路况不同,不同城市间自驾旅行每百公里油耗不同,为旅行选择最经济路线。
设计工作量:
40课时
工作计划:
见课表
指导教师签名:日期:2013.12.1
教研室主任签名:日期:
系主任签名:日期:。
数据结构课程设计任务书一、选题选题标准是数据结构算法实现及在具体问题中应用。
可选择下列和实际应用紧密结合较综合性题目,也可自选(自选题必需经过任课老师认可)。
要求经过课程设计实践,在数据结构表示、数据结构选择及应用、算法设计和实现等方面加深对数据结构课程基础内容了解和综合利用能力提升。
对下列题目每个同学课设任务按下式确定:按宿舍,每两个宿舍同学组成一小组,共同完成一个任务数据结构课程设计任务书1题目:学生运动会成绩数据库功效:学生运动会成绩数据库系统统计某校运动会上全部运动项目,各系取得分数及排名情况,包含50、100、200,400,1500米,跳高,跳远,标枪,铅球铁饼等。
进入系统后能够输入和修改某个项目标结果情况,能够按各系院编号输出总分;按总分排序;按男团体总分排序;按系院编号查询;按项目编号查询;按女团体总分排序。
分步实施:1)初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;2)完成最低要求:建立一个文件,包含某个系,5个项目标得分情况,能对文件中信息进行扩充(追加),修改和删除;3)深入要求:完成对多个系,多个项目标得分排序,和完成系统查询功效。
有爱好同学能够自己扩充系统功效。
键盘输入:系院数目,男子项目数女子项目数,(每项目取前三名,分别为10,5,2分)要求:1)界面友好,函数功效要划分好2)总体设计应画一步骤图3)程序要加必需注释4)要提供程序测试方案5)程序一定要经得起测试,宁可功效少部分,也要能运行起来,不能运行程序是没有价值。
数据结构课程设计任务书2题目:哈夫曼树应用功效:1.从终端读入字符集大小n,和n个字符和n个权值,建立哈夫曼树并将它存于文件hfmTree中.将已在内存中哈夫曼树以直观方法(比如树)显示在终端上;2.利用已经建好哈夫曼树(如不在内存,则从文件htmTree中读入),对文件ToBeTran中正文进行编码,然后将结果存入文件CodeFile中,并输出结果,将文件CodeFile以紧凑格式先是在终端上,每行50个代码。
题目:数据结构与算法课程设计任务书(一)目的和意义课程设计是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有重要的意义。
学好数据结构对掌握实际编程能力很有帮助。
为了学好《数据结构》,必须掌握编写一些在特定数据结构上的算法,并通过上机调试,更好地掌握各种数据结构及其特点,《数据结构》课程设计正是根据这种需要而设置的。
本课程设计应达到以下教学目的: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;}}}。