《数据结构与算法》课程设计的心得体会

2024-07-25

《数据结构与算法》课程设计的心得体会(精选12篇)

篇1:《数据结构与算法》课程设计的心得体会

课程设计的心得体会

在两周的学习和实践过程中,通过解决学生搭配问题这一实际问题,让我对循环队列有了更深的了解,对数据结构也产生了更加浓厚的兴趣,同时也是对我解决实际问题能力的一次提升。

记得王教授给我们上课时就要不断的通过走算法的方式,掌握所学习的数据结构、算法等,而上机则能进一步巩固自己所学的知识、提高自己的学习能力。在上机的同时也改正了自己对某些算法的错误使用,使自己能在通过程序解决问题时抓住关键算法,能够很好的够造出解决问题的数据结构、算法的设计思想和流程图,并用C语言描绘出关键算法。

首先对于这次的课程设计题目而言,主要是对队列这一知识点的运用。首先是对问题的分析,明白题目的具体要求,即将现实生活中的舞会搭配问题,用链队列这一数据结构描绘出来。用两个链队列boy和girl分别代表男生和女生,当播放每一首歌曲时,便可使两队各有一元素出队列,这样就可以模拟出搭配情况。同时,由于题目要求系统能模拟动态地显示出上述过程,所以就考虑调用一个延迟函数sleep(),使歌曲之间有一段时间间隔,即模拟了显示中的那一动态过程。其次便是在实现过程中遇到的具体细节问题,比如一开始设计了两个出对函数DeQueue(),让首元素结点出队,然后调用入队函数Add(),使其入队到队尾,但在测试时发现,如果输入的人数为2,那么在到第三首歌曲时程序便会终止;经过分析发现是这两个函数的调用,使数据出错,所以就将这两个出对函数用一个函数change()代替,这个函数能实现将首元素结点移到队尾的功能。这样不仅没有了之前的问题,而且使程序更加易懂。在这些细节方面的具体设计,是对个人分析问题、解决问题能力的一个很好的锻炼。通过这个过程的锻炼,不仅能对所学的知识点有很好的掌握,而且还是对个人能力的很好的训练。

其次,以前我对数据结构(C语言描述)的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。让自己有一定的能力去改正一些常见的错误语法,很高兴这两周的学习让我对数据结构(C语言描述)有了新的认识,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。在这次课程设计的实验中,我收获了许多知识,通过查找大量资料,请教老师,以及不懈的努力,也培养了独立思考、动手操作的能力。我也学会了许多学习和解决实际问题的方法,让我受益匪浅。课程设计对我来说,趣味性强,不仅锻炼能力,而且可以学到很多东西,在与老师和同学的交流过程中,互动学习,将知识融会贯通,也增强了我和同学之间的团队合作的能力。让我们知道只要努力,集中精力解决问题,一定会有收获的,过程也是很重要的。

在这次课程设计中我们要学会利用时间,在规定的时间内完成我们的任务,要逐渐养成用C语言编写程序的良好习惯。这些对我来说都是一种锻炼,一个知识积累的过程,一种能力的提高。要打好基础,才能用更好的办法,更简洁明了的程序解决实际问题,只有这样才能进一步的取得更好的成绩。我们会更加努力,努力的去弥补自己的缺点,发展自己的优点,去充实自己,只有在了解了自己的长短之后,我们会更加珍惜拥有的,更加努力的去完善它,增进它。

当然我现在的水平还是很有限,但我还会继续努力的,在解决实际问题时如果遇到了难题,我们要学会去查找大量的有关这方面的资料,还要借助于网络不断扩大自己的知识面和阅读量。这样也可以锻炼我们的自主学习能力和解决问题的能力,学到了许多以前没学到的东西。

在课程设计中的程序都比较复杂,所以需要我们要更加地细心,认真的完成每一步的操作,修改语法,按照老师的指导思想来完成。还记得一开始拿到题目时我们的一脸茫然,而现在是收获满满的自信,每个人都或多或少有所收获,也让我们对程序设计和算法有了进一步理解、认识。

篇2:《数据结构与算法》课程设计的心得体会

这次课程设计抽到了一个不太好的题目,是“国王与骑士”问题。乍一看是完全没有头绪,甚至连题目要求都感觉有些晦涩难懂。虽然很羡慕那些抽到了简单题目的同学,但既已成为事实,也没有办法,于是我便静下心来思考“国王与骑士”。

仔细钻研了一天,终于有了些思路,但都只是泛泛而谈,根本不能转化为具体的算法。就比如说骑士的走法问题吧,骑士是以“马”字形行走的,要判断两点间的最短路径,虽然肉眼判断比较简单,但转化成计算机问题时就出现了一系列问题。于是我又不得不停下程序的思考,去查询各种资料。我首先吧整个问题分裂开来,分解成了多个细小的问题,然后再分别查询每一个小问题,这样就轻松多了。就像上面的例子,我只需要查询有关最短路径的算法,就可以解决,这节省了我很多时间。但是。即使是一个简单问题也有多种算法可以解决,这就要求我根据题设条件进行判断,从中寻找最优算法。比如,在球巨额骑士的最短路径时就有弗洛伊得算法,迪杰斯特拉算法,还可以通过广度优先探测的方法等等。但就这一问题而言,我觉得在这里应用广度优先搜索应该是最简单易行的,而且使得算法的时间复杂度会大大降低。就这样,通过问题的分解,以及每个小问题的查询资料与询问老师,我逐步解决着这个问题。

在这一个星期的上机实践学习中,我对C语言有了更进一步的认识和了解,我明白了要想学好它要重在实践,要通过不断的上机操作才能更好地学习它。通过实践,我也发现我的好多不足之处,首先就是自己的经验还很匮乏,在设计算法思路时总是以自然的语言去理解分析,而不能把自己放在机器的角度去看问题,这就导致了许多问题看似可以解决,但真正到了上机编程敲代码是却无从下手。再有对C语言的一些标准库函数以及对函数调用的正确使用不够熟悉,另外,我还对C语言中经常出现的错误也不太了解,也不够敏感,这使得我在程序的调试过程中花费了太多多余的时间。通过实践,使我在这几个方面的认识有所提高。

篇3:《数据结构与算法》课程设计的心得体会

1 课程设计中存在的问题

课程设计的教学是整个数据结构教学环节中特别重要的一个环节,其重要性已得到了普遍的认可,但实际教学效果往往不太理想,主要存在以下几个方面的问题。

1.1 编程基础差、软件开发思想欠缺

C/C++语言程序设计是数据结构的先导课程。尽管之前学生已学过这些课程,但由于语言本身规则复杂,面向对象的思想更是不容易掌握,再加上学生没经过系统的软件开发训练,导致学生普遍存在编程基础差、调试能力弱、代码编写可读性差、拿到问题不事先做需求做规划就急于写代码等,这些都制约着学生完成任务的质量。

1.2 时间安排不合理

一般数据结构课程设计的时间安排在学期末的1-2周内,但是由于这个时候各门功课的复习及考试工作已经展开,学生为了备考,往往应付了事,能力差的学生为了考试不挂科,往往选择最基础的题目;能力强的为了考试考出好成绩,也会选择难度系数较低的题目,都是只求顺利过关,用在课程设计上的时间和精力非常有限,能够真正将心思花在课程设计上的学生更是少之又少,这样就根本谈不上创新能力和团队协作能力的培养。

1.3 选题缺乏统一标准

现有的课程设计教材很难适应所有的院校,而且选题难度区别不大,并未形成应有的层次。其中一些选题还能直接从网上或从资料上获得解答,导致学生中抄袭现象明显,课程设计并不能达到我们事先预期的教学效果。

1.4 教师的指导或多或少

整个课程设计中,教师的指导不可缺少但又不能面面俱到。而在现行的课程设计教学中,有的教师,什么都讲得清清楚楚却制约了学生的创新能力;有的教师公布选题后,由学生根据选题自己独立完成设计工作,对自己对学生完成设计的过程关注指导太少,这样学生遇到问题后不能及时解决,就会去拷贝一个,从而失去了做课程设计的意义。

1.5 课程设计报告缺乏统一规范

规范文档的撰写能力是课程设计需要培养的又一大能力。有些教师一开始不给学生规范的设计文本,学生交上来的报告五花八门,根本不像软件设计文档。

1.6 考核机制不完善

一直以来,课程设计报告被很多教师作为评定课程成绩的重要依据,而对学生完成课程设计的课程关注不多,这样就不能考察出学生的真正实践操作能力,从某种程度上讲,可以说是轻重倒置了,课程设计的教学效果自然不理想。

2 实施方案和问题对策

为了实现教学目标,我校制定了规范的课程设计流程,如下。(1)任课教师先布置课程选题,提出实现要求和完成任务流程,然后选取有针对性的问题,跟学生进行示范性、启迪性地剖析与讲解,要求学生必须按流程一步一步进行;(2)学生根据老师提供的选题,填好选题表并提交;(3)学生根据选题,写出需求分析——完成概要设计——详细设计——编码与测试;(4)分组答辩,采用组长主要负责制;(5)提交课程设计报告。实践表明,这样的教学方法有助于培养学生的独立思考能力、讲述交流能力,规范文档的撰写能力,提高学生的积极性、创造性与团队协作精神,教学效果不错。

2.1 调整课程设计时间

我院将课程设计时间推到期末考试之后的假期进行,这样学生就能够一门心思将精力扑在课程设计上,分组去选择难度较大的选题,使自我挑战成为一种可能,也才能够更好地培养团队合作精神。

2.2 分层次精心设计选题

为了防止学生互相抄袭程序,课程设计的选题按照老师提供题目,学生自由选择或者随机抽取的方式来进行。

在课程设计题目的拟定上,为了能够更好地激发学习较好、动手能力较强学生的学习兴趣,同时兼顾学习较差,动手能力较弱的学生,使各层次的学生都能得到提高和锻炼,将课题按照难易程度分成了三种级别(一星级,二星级,三星级)。其中,三星级难度相对较大的题目,可由课程学习成绩较好的学生选择。

2.3 培养学生团队合作精神

学生自主组建课程设计小组,然后共同协商选择合适的选题。由小组组长负责(建议优秀的学生主动担任组长,带动组内基础和动手能力较弱的学生),小组成员自行对模块进行划分和任务安排,要求每个成员都有自己需要独立完成的模块,填好选题表。在任务实施的各个重要环节,要求每个组员都要积极参加讨论,出谋划策,相互帮助,形成一个良好的团队氛围,最后齐心协力完成设计任务。当然小组之间也可以相互帮助,共同攻克难题,这样一个任务完成后,学生的团队合作精神在不知不觉中就培养起来了。

2.4 培养学生交流表达能力

在课程设计的最后阶段,我们要求学生分小组集中答辩。答辩的主要目的是训练学生的表达能力。各小组先由小组长指派一位同学对整个项目进行综合性讲解,包括项目研究意义、整体设计思想、主要功能模块以及各成员的分工,展示设计成果,回答老师提问;再由小组成员针对自己完成的模块进行讲解,重点要讲出自己是如何根据实际问题定义相应的数据结构并解决问题的。

2.5 培养撰写文档的能力

培养学生按要点写出规范文档是课程设计需要培养学生的又一大能力,教师不光是要给出规范文档的要求和范例,还要给学生讲清楚为什么要这样写。我院的文档要求主要包括以下几个方面:

(1)问题描述;(2)ADT抽象数据类型定义;(3)模块调用关系;(4)详细设计:结构的定义;算法的描述;(5)分析与讨论;(6)参考资料;(7)致谢

2.6 考核成绩的评定

课程设计的总评成绩应包括平时表现、课设检查(包括成果展示和答辩情况)和课设报告三部分,三部分所占总评的比例分别为20%,50%,30%。

平时表现的成绩从学生是否按时出勤、课设过程中是否存在玩游戏的情况、是否服从老师管理等方面酌情评定。课设检查的成绩根据学生完成课设的实际情况来考核。本次课程设计要求课设检查统一采取学生答辩的形式来进行,即要求学生在完成课设的题目后,演示并讲解自己的程序,且回答老师提出的问题。指导老师主要从:问题的理解及解决能力,设计过程中独立工作能力,设计说明书、程序清单、开发的程序质量与工作量,设计题目的难度、先进性和实用价值,创新能力等方面进行评价打分(难度系数为一星级分数60~75,难度系数为二星级分数75~85,难度系数为三星级分数85~95)。要严格控制90分以上的高分人数,我们鼓励原创、鼓励创新、鼓励优化算法、鼓励扩展知识体系,只有做到了这些中的某些点才能给出90分以上的高分。课设报告的成绩根据学生完成的报告文档质量进行打分。课设报告若出现雷同或抄袭现象,报告的考核成绩一律为0分。

3 总结

篇4:《数据结构与算法》课程设计的心得体会

关键词:数据结构与算法;综合性实验;设计性实验

一、引言

在计算机科学与技术、软件工程等专业中,《数据结构与算法》课程具有较强的实践性,因此实验教学是该课程教学过程中的一个非常重要的环节。在以往的实验教学中,学生都是按照已经设计好的实验要求和步骤进行着验证性的实验,学生一般是被动地接受或机械式地编程,以完成实验讲义中的验证或孤立的单元实验。这种实验教学模式使得学生缺乏主动性和独立思考问题的能力,不利于他们综合素质的提高和自主创新能力的培养。为了克服这些不足,使学生真正能把理论知识灵活运用到实践当中,我们开设了《数据结构与算法》课程综合性、设计性实验项目并立项进行实践研究,通过两三年的实践,取得了一些经验和成果,学生的实践能力也有了较大提高。

二、综合性、设计性实验项目的实践环节

1.实验项目的选择。

通过《数据结构与算法》课程的学习和前期验证性实践环节,学生已初步具备了进行综合性、设计性实验的能力。为进一步提高学生的设计能力和编程能力,我们设计了4个综合性、设计性实验项目供学生选择:

①校园导游系统的设计(设计性);

②书管理系统的设计(综合性);

③哈夫曼编码/译码器(综合性);

④散列表的设计与实现(设计性)。

2.实验项目的内容。

校园导游系统的设计

问题描述:

设计一个校园导游程序,为来访的客人提供信息查询服务。

基本要求:

①设计你所在的学校的校园平面图,所含景点不少于15个,以图中顶点表示校内各景点,存放景点名称、代号、简介等信息,以边表示路径,存放路径长度等相关信息;

②为来访客人提供图中任意景点相关信息查询;

③为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短路径(静态或动态表示出来)。

图书管理系统的设计

问题描述:

设计一个图书管理系统完成图书管理基本业务。

基本要求:

①每种书的登记内容包括书号、书名、著作者和库存量;

②对书号建立索引表(线性表或树表)以提高查找效率;

③系统主要功能如下:

采编入库:新购一种书,确定书号后,登记到图书账目表中,如果表中已有,则只将库存量增加;

借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;

归还:注销对借阅者的登记,改变该书的现存量。

用户管理。

数据存储(要求用文件实现数据存储)。

哈夫曼编码/译码器

问题描述:

设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件(压缩文件,后缀名.cod);反过来,可将一个压缩文件译码还原为一个文本文件(.txt)。

基本要求:

①随机抽取20个文本文件作为统计样本,统计这些文本文件中各字符的平均出现次数,作为权值,建立哈夫曼树及各个字符的哈夫曼编码;

②将用户输入或选择的待压缩文本文件利用①建立的编码表进行编码,生成压缩文件(后缀名.cod);

③输入一个待解压的压缩文件名称,并利用相应的编码表进行译码;

④显示指定的压缩文件和文本文件;

⑤(选作) 把哈夫曼编码用二进制位紧缩到一个变量中,利用位运算实现真正的数据压缩,并求压缩比。

散列表的设计与实现

问题描述:

设计散列表实现电话号码查找系统。

基本要求:

①随机生成1万个记录,每个记录有下列数据项:电话号码、用户名、地址,每个数据项的内容都是随机生成的;

②分别以电话号码和用户名为关键字建立散列表(自行选择或构造合适的散列函数);

③采用双散列法解决冲突;

④查找并显示给定电话号码的记录;

⑤查找并显示给定用户名的记录。

3.预期目标。

进一步巩固和加深对《数据结构与算法》课程中基本知识的理解,熟悉各种逻辑结构及存储结构;

了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

培养学生从事软件开发的编程及创新能力;

提高学生综合运用所学的理论知识解决问题的能力;

训练用系统的观点和软件进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

4.实验项目的组织与实施。

针对综合性设计性实验项目,安排学生自选项目并进行项目设计和开发,每个项目20学时,按照下面的项目开发设计步骤,最后完成课题的总体设计与实现。

项目分析

根据实验项目内容的要求,充分地分析和理解问题,明确问题要求做什么、解决什么问题、实现什么功能。

概要设计

对项目内容描述中涉及的操作对象,设计相应的数据结构,并按照以数据结构为中心的原则对模块进行划分,定义主程序模块和逻辑结构。逻辑设计的结果是每种数据结构的定义(包括数据结构的描述和每个基本操作的功能说明)。

详细设计

为各个数据结构设计相应的存储结构并写出各模块的算法。设计是编程中重要的一环,在“详细设计”过程中,引导学生结合总体设计制订合理的程序结构和算法,理顺各个模块之间的相互关系,将详细设计的结果用结构图及流程图清晰地描述出来,在本过程中,教师要尽可能帮助学生养成自己解决问题的习惯。

编程

将详细设计的结果进一步求精为程序设计语言程序。在该环节中,教师应指导学生按照规范的程序编写方法去编程,并指导学生按照大型软件中常用的调试方法对程序进行跟踪及改进。

结果分析

在编程过程中及结束后,形成学生、课题小组组长、指导教师三位一体的项目质量监控体系,做到对各个阶段的结果都能进行实时的检测,如有不足之处,小组内成员和学生自行研讨出合理的整改方案并对课题实施进行改进,直至达到功能要求。

5.项目总结。

主要包括学生实验项目总结心得、实验报告撰写,学生成绩的评定。

实验项目总结心得

在实验临将近结束时让学生共同讨论实验结果的正确性,讨论实验设计步骤的合理性,总结经验,进一步改善项目实施的方案及步骤。笔者认为,实验后的总结非常重要,是从理论到实践,再由实践到理论认识的进一步升华,也是使学生提高实验兴趣、锻炼并增解决实际问题的重要过程和手段。

实验报告撰写

学生实验报告一般应包含的内容是:实验题目、实验环境、实验目的、实验任务、数据结构描述、算法流程图表示、实验总结。

学生成绩的评定

教师根据学生的实验设计报告、学生的实际操作能力(程序检查)及学生的创新能力等几个方面综合评定,给出综合成绩。

三、实践的成果

1.对学生的影响。

经过近两年的实验教学实践,有超过70%的学生认为此次实验收获很大,大约80%的学生对这类实验取得的成果表示满意。从总体效果来看,学生通过综合性、设计性实验,提高了设计及编程能力。大部分学生认为《数据结构与算法》综合性、设计性实验项目的开展改变了以往传统的实践教学模式,内容新颖,提高了他们的编程兴趣和热情,对他们帮助很大。

2.对教师的促进。

《数据结构与算法》综合性、设计性实验的指导教师由计算机科学技术学院《数据结构与算法》课程的主讲教师和专业实验室的教师共同承担,我们认为,开展综合性设计性实验项目整合了多个知识环节,既能够帮助学生掌握知识的系统性和衔接性,理清程序设计的思路,促进知识的融会贯通;同时也给主讲教师带来新的挑战,能使教师总结在理论教学中的不足,进一步加强教学方法和内容的改革。

参考文献:

[1]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2006.

[2]唐册善.数据结构—C语言描述[M].北京:高等教育出版社,2003.

篇5:《数据结构与算法》课程设计的心得体会

每一次课程设计,都有不一样的感受,通过课程设计,对我而言,得到的不仅仅是知识,更是获得知识的方法,这显得更加的重要。

本次课程设计,我的设计题目是校园导游程序,本程序主要用到的是课本中图的知识,以校园中的景点作为顶点,以景点间的路径作为边,就构成了图。我用到的时临界表存储结构,这样对空间的浪费不至于很大。主要完成的功能是最短路径和所有路径的算法,最短路径用的是书上的Dijkstra算法,原来我对这个算法的只是出于一个对大致的过程知道的程度,课程设计之后,我对该算法可以说是很熟悉了,不管是算法思想还是代码。另一个主要功能是求两个景点间的所有路径,这个算法书上没有提到,我一步步的摸索,用了一个递归的思想,再经过不断的修改,一次次的单步运行,通过查看相应变量的变化情况,将此算法实现的。最后完成整个程序。

课程设计,本人感觉对于写程序,首先要要的是思想,即完成每个功能需要的算法思想,在想好思想后,就要具体到代码,计算机能够识别的代码,代码写好后,大多情况下是有错误的,首先要排除语法错误,然后时语义错误,在排错的过程中,我用到的最多的是单步运行,感觉单步运行这种方式很管用,通过一步步的运行,通过每一步的运行,观察其中变量的变化情况,可以很容易的知道代码是哪一步出了错误,这样对排错有很大的帮助。在课程设计的过程中,曾遇到过很多的问题,如对路径字符串的处理,整个递归一步步的往下调用和返回过程,还有很多细节的问题。在遇到问题时,首先想到的是自己思考,分析过程,查找资料,上网百度,通过自己的努力还没有解决时,这是首先需要问的是自己旁边的同学,和同学讨论,有时还争得面红耳赤,如果最后将此不下,就向老师提问。这课程设计的过程中,我几乎所有的问题处理流程就是这个样子的。我感觉这就是一种学习的方法,在学习中遇到难题时的学习方法,要把这种学习的方法变成一种习惯,这才是每次课程设计应达到的一种效果。

篇6:《数据结构与算法》课程设计的心得体会

心得体会

通过本次课程设计,对图的概念有了一个新的认识,在学习离散数学的时候,总觉得图是很抽象的东西,但是在学习了《数据结构与算法》这门课程之后,我慢慢地体会到了其中的奥妙,图能够在计算机中存在,首先要捕捉他有哪些具体化、数字化的信息,比如说权值、顶点个数等,这也就说明了想要把生活中的信息转化到计算机中必须用数字来完整的构成一个信息库,而图的存在,又涉及到了顶点之间的联系。图分为有向图和无向图,而无向图又是有向图在权值双向相等下的一种特例,如何能在计算机中表示一个双向权值不同的图,这就是一件很巧妙的事情,经过了思考和老师同学的帮助,我用edges[i][j]=up和edges[j][i]=up就能实现了一个双向图信息的存储。

对整个程序而言,Dijkstra算法始终都是核心内容,其实这个算法在实际思考中并不难,也许我们谁都知道找一个路径最短的方法,及从顶点一步一步找最近的路线并与其直接距离相比较,但是,在计算机中实现这么一个很简单的想法就需要涉及到很多专业知识,为了完成设计,在前期工作中,基本都是以学习C语言为主,所以浪费了很多时间,比如说在程序中,删除顶点和增加顶点的模块中都有和建图模块相互重复的函数,但是由于技术的原因,只能做一些很累赘的函数,可见在调用知识点,我没有掌握好。不过,有了这次课程设计的经验和教训,我能够很清楚的对自己定一个合适的水平,而且在这次课程设计中我学会了运用两个新的函数sprintf()和包涵在#include 头文件中的输入函数。因为课程设计的题目是求最短路径,本来是想通过算法的实现把这个程序与交通情况相连,但是因为来不及查找各地的信息,所以,这个计划就没有实现,我相信在以后有更长时间的情况下,我会做出来的。

篇7:《数据结构与算法》课程设计的心得体会

通过这次课程设计使我进一步达到理论与实际相结合,提高了自己组织数据及编写程序的能力,使我们能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来并用软件解决问题,培养良好的程序设计技能,掌握设计程序的思路,学会用计算机语言编写程序,以实现所需处理的任务,锻炼自己的动脑能力,学会用自己的思路解决现实中的实际问题,虽然一开始也走了一些弯路不过在同学和老师的点拨下完成了该程序,这次课程设计中遇到了很多问题,一开始准备用二维数组存放的可考虑到同一个学校同一个项目有好几个人参加,就不能用二维数组了,如果每个学校都申请一个二维数组也非常不方便,还是用顺序表方便也不浪费空间,在这次课程设计的过程中虽然很多次都参照了课本及资料,不过这使我更加熟悉了顺序表以及结构体的定义及实现,调试过程中也遇到了一些问题也都是自己独立思考完成的,还有一个体会是,遇到不会的地方可以参考课本也可以去图书馆或网上查资料,当然主要思路有了也就简单点了.在老师的答辩指指导下,程序数组那块程序的书写老师问我为什么是那样的,当时写这块程序的时候是看书上数组那块程序再加上自己的主观想法觉得就是这样写的,虽然这块程序当时那种主观想法是写对了,但是经过老师的答辩提问才知道虽然是写对了,但是这种思考和想法是错误不科学的,真正的是因为第2 次循环是因为第一次释放了一个。所以通过这次课程设计让我懂得了一个很重要的道理,就是以后如果哪地方有一点迷惑,有一点不懂的地方不能凭自己主观的思考和想法觉得应该是这样的,一定要找老师问清楚为什么是这样的,一定要把每步每个小程序都要搞的十分的清楚,这真是个很好的收获。还有就是这个程序的男女问题上,开始准备在结构体中加一个sex的点,大使那样对与男女项目还是有点麻烦,后来在同学的提醒下,通过参赛项目号就可以解决了,比m大就是女子项目,比m小或者等于m就是男子项目。这样就可以很完美地解决这个问题了。

其实,当你实验遇到问题时,自己会通过很多途径去解决它,没有解决时,心急如焚,解决之后的那种快感是前所未有的,这也许就是付出了行动之后的收获吧!

这也教会了我们以后在社会上,遇见了事情不可怕,只要不被困难击倒,解决了它,那样我们就是胜利的!

篇8:《数据结构与算法》课程设计的心得体会

《数据结构》是计算机学科的核心专业基础课程,涉及大量抽象数据类型及算法[1],理论性很强,教师往往把教学重点放在学生对理论的理解及锻炼学生的抽象思维和创造能力上[2]。为了培养学生的实践能力,笔者所在系开设了数据结构课程的后续课程:《数据结构与算法设计实训》,旨在让学生通过更多的设计性及综合性上机实践来解决一些典型问题,通过专门的实训环节让学生更好地理解和掌握算法设计所需技术。本文将从课程的整体架构和安排、课堂教学环节组织、实训报告规范化以及课程考核方式等方面进行探讨。

1 课程整体安排

《数据结构与算法设计实训》课程的教学目的是让学生熟悉常用的数据结构和算法,以便在软件开发中选择合适的现成工具;掌握有效组织数据和处理数据的方法和技能,以便设计高质量的程序;培养学生分析问题、解决问题的能力和实际操作技能。

该实训课要求学生在Visual Studio集成开发环境下进行编程实现及调试运行。鉴于在前期《数据结构》课程的上机实验中学生已经开展过常用数据结构的验证型实验,故本课程主要以设计型及综合型实验为主,另外考虑到软件工程系学生近几年参加“蓝桥杯”全国软件专业人才设计与创业大赛均取得可喜成绩的情况,选取部分往届蓝桥杯的算法设计题目来激发学生参与兴趣并提高其算法设计及实现能力,因此整个实训分为3个阶段进行。第一阶段是针对各主要数据结构及算法的单项设计型实训;第二阶段是选取部分“蓝桥杯”的算法设计题目进行训练;第三阶段是进行覆盖较多数据结构及算法知识点的综合设计型实训。各阶段实训内容如下:

(1)第一阶段:单项设计型实训[3]。具体安排如下:(1)类和类模板、多文件编程的实训基础训练:以约瑟夫环游戏程序为实训项目;(2)线性表训练:以一元多项式的加法运算、改进的约瑟夫环游戏程序为实训项目;(3)栈和队列训练:以八皇后问题、模拟后缀表达式的计算过程为实训项目;(4)树和二叉树训练:以查找节点并显示该节点的层次和路径、哈夫曼编码问题为实训项目;(5)图结构训练:以无向网络的最小生成树问题、交通咨询系统的设计与实现为实训项目;(6)排序算法训练:以堆排序的算法设计及实现、学生成绩处理系统为实训项目;(7)查找算法训练:以航班信息的查询与检索为实训项目。

(2)第二阶段:“蓝桥杯”兴趣型算法实训。(1) 分治算法训练:以输油管道问题、循环赛日程表问题、邮局选址问题、集合划分问题为实训项目;(2)回溯算法训练:以桥本分数式问题、“马”的遍历问题、素数环问题、排列及排列树的回溯搜索问题为实训项目。

(3)第三阶段:综合设计型实训。综合设计型实训既能加强学生对各数据结构与算法知识点的综合应用和融会贯通,提高其解决实际问题的能力,同时还能够培养学生的工程意识、创新能力、团队精神等综合素养[4]。该阶段分小组进行,5~6人为一个小组,分组时可参考学生前两阶段的实训表现合理搭配,尽量让每组各个成员具有不同的能力优势。分组固定后,每组指定一名学生为小组长,负责整个综合设计项目任务的分工与安排。各小组在满足选题要求的情况下根据自身兴趣进行课后的调研选题。选题的要求主要包括各小组不重题、覆盖尽可能多的数据结构与算法的知识点,且工作量要达到一定要求等,具体每个题目是否通过要报经教师审核确认。此综合设计项目阶段安排在实训课的最后两周。为保证进度,分组和选题应放在最后两周综合设计实训开始之前进行。

2 教学环节组织

第一阶段的单项实训期间,教师教学采用讲练结合和分层训练的方式。首先由教师对相关数据结构及算法的知识点进行串讲,主要是对上学期学习的《数据结构》课程的相关知识和算法进行简略回顾与复习;然后,教师以一个单项实训项目为示例进行讲解,学生立即跟练,选择的示例编码量要适中,以保证大多数学生能当堂在规定时间内完成,少数完不成的学生则于课后完成;最后教师布置单项实训的课后任务,按分层训练方式布置,即对每个题目安排必做和选做内容,必做内容是最重要的基础训练,要求每个学生课后必须完成并提交实训报告。选做内容针对学有余力的学生,鼓励其改进算法,扩展及完善其功能,对选做部分予以加分计入平时成绩。

第二阶段的兴趣单项实训期间,以课堂启发式实训为主,教师分别提出几个兴趣型题目的要求并对设计思路予以提示,然后学生根据自己的兴趣选择其中一个进行设计和实现,教师在机房巡视解答学生疑难问题和检查学生实训情况,最后针对各个题目选择有代表性的实训结果进行评讲。

第三阶段的综合设计实训期间,要求学生上课期间的座位在分好项目小组后固定下来,每次课开始则要求各小组花5~10分钟对小组项目情况进行讨论,教师逐个了解各小组进展情况,并针对小组的难点问题提供解决思路。教师在每次下课前花10分钟左右对各小组的项目进展情况及普遍存在的共性问题作一个分析总结。

3 实训报告规范化

课程要求学生提交的文档分两类:单项实训报告和综合设计实训报告。

(1)单项实训报告。单项实训报告内容主要包括实训目的、实训环境、实训题目、数据结构选择及算法设计、程序源码、调试分析及运行结果截图、算法时间性能分析及改进思路等几大部分。

(2)综合设计实训报告[5]。要求按照软件工程规范,详细记载以下几个方面的内容:(1)需求分析:说明项目任务;(2)概要设计:说明项目中用到的抽象数据类型的定义、主程序流程以及各程序模块之间的调用关系;(3) 详细设计:实现程序模块的具体算法;(4)调试分析:调试过程中遇到的问题及解决方法;(5)测试结果:以输入和输出方式列出测试结果;(6)总结:算法的时空分析及经验和体会;(7)附录:带注释的源程序。

4 课程考核方式

实训课程的考核及评分应重视实训过程,该课程强调数据结构与算法设计及应用能力的提高,采用多项组合考核的方式,从学生的上机出勤、实验准备、实训表现、程序编写和运行情况、实验报告完成情况等几个方面综合衡量。具体如下:

(1)平时成绩(占总成绩的10%)。平时成绩由考勤成绩和课堂实训表现两部分组成,各占50%。

(2)单项设计实训项目成绩(占总成绩的50%)。计算共9个单项设计及兴趣项目实训的平均成绩,每个项目的成绩依据任务完成情况、程序代码质量及实训报告文档综合评分。

(3)综合设计实训项目成绩(占总成绩的40%)。综合设计实训完成后,教师组织学生进行小组答辩。答辩时全班学生参与,要求每个小组制作一份答辩PPT,并推荐一人简要介绍项目的需求分析、总体设计思想、组内分工以及在算法设计与编程实现过程中遇到的困难及解决方法等[6]。然后由教师针对每个小组成员负责的部分提出相关问题,要求对应成员进行回答。教师根据各组的答辩情况给出小组答辩成绩,并根据各小组各成员负责任务的难度和工作量给以个人加权分,这样既能培养学生的团队协作精神,又比小组成绩一刀切的方式更能调动学生学习和实践的积极性。答辩通过后每个小组提交一份项目源码、综合设计实训报告和答辩PPT。综合设计实训项目成绩计算方式为:小组项目源码及质量分*30%+小组答辩分*30%+综合设计实训报告文档分*30%+小组内个人加权分*10%。

5 结语

《数据结构与算法设计实训》在软件工程专业实践类课程中处于核心地位,能有效促使学生熟练掌握常用的数据结构和算法,提高学生数据组织能力,培养学生分析问题、解决问题的能力,对培养学生设计和编写复杂程序的能力至关重要。该课程作为近年来西华大学计算机与软件工程学院软件工程系新开课程,其教学方法和措施还在逐步摸索过程中,尚需要不断地研究、探索、创新、总结和改进,以便为学生后续专业课程的学习及编写大型程序打下牢固基础。

参考文献

[1]王红梅.数据结构(C++版)[M].第2版.北京:清华大学出版社,2011.

[2]陈姝颖,陈雷,赵小芳,等.《算法与数据结构》实验教学改革的实践与探索[J].福建电脑,2010(10):53-54.

[3]刘燕君,苏仕华,刘振安.数据结构课程设计:C++语言描述[M].北京:机械工业出版社,2014.

[4]唐培和,徐奕奕,李威龙.《数据结构与算法》课程教学问题与探讨[J].现代计算机:下半月版,2012(13):18-21.

[5]赵越,章小莉.数据结构实践教学模式的设计与探索[J].计算机教育,2009(13):34-35.

篇9:《数据结构与算法》课程设计的心得体会

【摘 要】针对在数据结构与算法实验教学中如何提高学生的编程和算法设计能力,分析并指出了在实验教学中普遍存在的问题,结合实验课的教学改革,开发实验平台,以期有效激发学生的学习兴趣和积极性,培养动手和创新能力。

【关键词】数据结构与算法 实验改革 平台建设

【中图分类号】 G 【文献标识码】A

【文章编号】0450-9889(2014)07C-0132-03

数据结构与算法实验是计算机专业学生必修基础课数据结构与算法的配套实验课程,是培养学生程序设计技能必不可少的重要环节。其目标之一是培养学生能运用理论知识与算法技术分析解决实际问题,能运用高级程序设计语言编程实现算法。从近年实验情况来看,在上机编写程序实现具体算法时遇到的种种问题,效果不容乐观,学生很难按时完成实验所要求的内容。

一、实验教学存在的问题与分析

数据结构与算法实验是一门实践性很强的技术基础课,经过多年实验教学分析,发现普遍存在如下主要问题:

(一)课程抽象,实验难度大

数据结构具有一定的抽象性,学生面对抽象概念在学习过程中常会遇到困难,基本每本理论教材在呈现概念时都会受到多方面限制,比如篇幅的限制,省略了算法细节部分或只给出伪代码,由学生自己补充,学生需要将算法用程序设计方法实现,完成有一定难度和技巧的程序设计并上机调试运行。对编程基础稍微薄弱的学生来说,就会出现不小的困难。

(二)实验相关资料偏少

由于学生基础薄弱,实验前又没有更多的相关实验资料进行预习,仅靠看课本理论和实验时的几个学时难以完成实验所要求的任务,也就谈不上创新人才的培养。

(三)学生程序设计语言课程基础薄弱

数据结构与算法课程是第四学期开设,对于很多先修课程要求高,高级程序设计语言是大学生进校第一、二学期学习,第一学期学习过程序设计思想,第二学期学习面向对象程序设计思想,由于大部分同学高中没接触过计算机语言学习,对过程程序设计思想还没掌握透,第二学期的面向对象程序设计学习又开始,学习非常吃力;导致常用的一些语法结构,如指针和结构体等内容难于理解。而这些语法恰恰是程序设计语言教学时的难点,也正好是学生完成数据结构实验必须掌握的内容,这给部分学生学习带来了一定困难。

(四)编程语言难

数据结构与算法编程语言描述主要用到C++语言,并大量用到了指针、链表和结构体等运算,这部分内容正好是大多数学生掌握知识点薄弱的环节,导致学生很难用高级语言将教材中的算法描述出来,由于问题的堆积、实验的欠账,容易使学生丧失学习兴趣和信心,导致学生间抄袭程序或实验报告的现象。

(五)编程技巧差

普通学生在低年级只编写过功能单一、结构简单的程序;而从功能单一的简单程序向涉及算法和稍复杂程序的数据结构编写过渡学习时,需循序渐进的方式和细致的引导,紧密结合理论教学。学生一下从简单编程直接到复杂的程序设计,不仅不适应,且设计技巧性较差。

二、实验教学改革目标的提出

根据以上学生实验时出现的诸多问题,特提出该课程的实验改革目标:

一是紧密配合理论教学,通过相关实验,帮助学生加深对数据的逻辑结构、存储结构、算法思想和具体实现等各个环节的整体理解,强化学生“结构——算法——编程”三者密切相关的意识,让学生思考和发现利用数据结构解决实际应用问题的有效方法,从而使学生分析和解决问题的能力得到锻炼和提高。

二是因材施教,让原本不同水平和能力起点的学生通过数据结构实验,能力和水平都有所提高,并且有兴趣有信心学好数据结构课程。

三是培养学生多方面能力,比如团队精神,口头表达能力,对学生全方面发展起到较好的推动作用。

三、调整实验项目内容,使其更加符合学生的认知规律

数据结构与算法实验内容主要是编程实验,提高学生的实践编程能力,巩固和强化理论课的教学效果。为了保证和提高实验教学质量,加深对课堂知识的理解,培养学生动手能力和思维能力,尝试对数据结构与算法实验项目进行重新设计,主要内容有:

针对编程基础较薄弱的学生,我们开发了数据结构与算法实验教学平台,学生在该平台上可获知实验相关的更多内容,通过平台引导学生重点回顾程序设计语言的基础知识,特别是数组和指针等有关操作。通过这些辅助手段,使学生对将要编写程序的一些语法和程序规则有所复习和掌握。还可通过平台对实验原理的动画演示,得到帮助和启发,从而更好更快地完成实验内容。

每个实验内容以章节为单位安排,依据实验教学目的,针对计算机相关专业所要达到的不同实验教学目标,以及考虑学生个体差异,每个实验项目都设置基础必做题和附加选做题两部分内容。这两类实验都需要紧密结合理论教学。必做题相对简单,目的在于帮助学生掌握基础知识。对于该部分题目,学生容易完成,能提高学生学习积极性并增强学习信心;选做题针对学有余力的学生,各个实验项目中的必做题均设计详细的实验准备内容,用于引导学生更好地进行实验前预习准备工作;主要在于培养和鼓励学生的学习兴趣和扩大知识面,进一步培养学生应用能力和创新意识,保证基础弱的同学学习兴趣,也提高了编程能力强的同学动手能力。例如,与线性表一章理论教学相配合的实验项目是多项式加减法,这个实验是对线性链表的建立、插入、删除、遍历等进行综合运算,对数据结构与算法第一实验内容来说稍有难度,可作为选作题或增加实验学时。在与栈一章理论教学相配合的实验项目是迷宫,这部分实验内容要求掌握回溯法和栈的基本运算等知识,有一定难度;用括号匹配作为必做题,能培养学生独立钻研,有助于学生解决问题能力的训练。

四、实验教学方法探究

实验前学生必须先预习和熟悉实验教学平台,了解实验内容的目的和要求,理解算法,描述语言的语法,查看相关资料,写预习报告。

通过多年实验教学中实验完成情况分析,软件工程专业的学生语言掌握较好,大部分学生能按时完成实验项目,其它专业的学生实验完成情况较差;由此,实验编程语言可以因学生而异,除软件工程专业的学生采用面向对象程序设计C++外,其它专业主要采用C语言描述,并且可增加前期语言学习时间。只有编程语言掌握扎实,数据结构与算法实验才能很好地完成。

开发数据结构与算法实验网络教学平台系统,该平台主要包含有课程介绍、在线课程、互动学习、下载资料等模块。有针对性地对每一个实验项目进行详细讲解和实验原理分析的动画演示,将抽象的数据结构问题制作为教学动画,借助形象的案例理解抽象的概念。教学内容利用Web页面为基本元素出现在站点中,学生通过访问站点来进行交互式学习。以辅助学生自主学习为主要目的,解决学生实验时无从下手的局面,启发学生思维,促进学生程序设计能力的提高。平台系统流程图如图1所示。

在线课程是教学平台核心部分,也是学生对数据结构与算法实验加深理解的重要环节,该平台从实验预习,到实验原理算法的演示,再通过在线课堂的视频教学、在线测试题训练及各种原理进行拓展教学。为了方便学生学习较抽象的数据结构与算法,能顺利进行程序编写,该教学平台还包含有18个flash动画用于原理算法演示,主要包括栈和队列、线性表、递归、查找与排序、树、图等内容,每个flash动画都有实验原理及主要代码实现过程,能更加形象展示数据结构的原理。例如:栈是一种先进后出的数据结构,在对栈原理进行动画设计时,根据用数组实现栈的特点,采取对栈先进行初始化的代码模块来对栈进行初始化,之后运行相应代码模块观察压栈出栈过程,同时还能观察到栈中数据的变化。在大部分flash动画演示过程中,flash页面左侧是代码部分,能体现当前执行的代码,并与右侧的动画演示及讲解分析一一对应。演示过程中如用户需要重新开始,还可点击“重新开始”按钮。这些flash动画演示将代码与动画有机的结合在一起,将抽象的代码转换为有形的动画,大大方便学生学习和对实验内容的理解。

如对栈原理进行动画演示的flash点击界面中压栈代码动画效果,该动画效果包括等待入栈的数字入栈的动画效果和位于等待区域的数字前移的动画效果。等待入栈的数字、入栈的动画效果和位于等待区域的数字前移的动画效果如图3所示。

图3 压栈的动画效果图

该平台互动学习是一个教师和学生互动的场所,实现动态交互的功能,教师能添加、更改、删除各种资源,学生、教师可以查看各种资源库里的资源。同时,学生可从平台上下载练习题和测试练习题资料,练习题有主要算法描述,可帮助学生进一步理解每个章节的算法原理,测试练习题有自动报错功能。

五、改革数据结构实验考核方式

让学生对以前所做实验作一个分析和总结。具体操作方案如下:首先将学生自由分组,小组成员共同从以前做过的实验项目选做题中选择一个进行程序的分析设计和编码实现,要求考虑程序的编写规范,程序的执行效率等方面。考核时,由实验教师从该小组随机抽取学生到讲台进行讲解和演示,根据程序完成情况和学生演示情况,决定该小组成员的平均得分,而每位学生的具体得分由小组成员内部根据该学生在该程序实现中的工作情况决定。通过这种方式,能培养学生的团队意识,达到互学互助的效果,同时也锻炼了学生的表达能力。

数据结构与算法实验环节教学改革的创新之处在于依托一门编程语言以及所开发的实验教学平台,因材施教,根据不同专业实际情况,综合考虑进行实验项目、实验内容和实验准备的合理设置,帮助学生在实验课上找到自己的最好学习方式,提高实验教学质量。

【参考文献】

[1]吴兵.高校计算机文化基础课程网络学习题库的研发[J].实验技术与管理,2011(2)

[2]朱洪浩.数据结构课程“工程化”实践教学模式研究[J].赤峰学院学报(自然科学),2013(15)

[3]马晓波,王翠茹.《数据结构》实践教学改革探讨[J].内蒙古农业大学学报(社会科学版),2010(02)

[4]赵耀红,孙宇.数据结构实验教学的实践与探索[J].长春大学学报,2012(04)

篇10:《数据结构与算法》课程设计的心得体会

姓名:何云龙学号:0804012022班级:08计科(2)班

“数据结构与算法课程设计”是计算机科学与技术专业学生的集中实践性环节之一,是学习“数据结构与算法”理论和实验课程后进行的一次全面的综合练习。其目的是要达到理论与实际应用相结合,提高学生组织数据及编写程序的能力,使学生能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来并用软件解决问题,培养良好的程序设计技能。

当初拿到这次课程设计题目时,似乎无从下手,但是经过分析可知,对于简单文本编辑器来说功能有限,不外乎创作文本、显示文本、统计文本中字母—数字—空格—特殊字符—文本总字数、查找、删除及插入这几项功能。于是,我进行分模块进行编写程序。虽然每个模块程序并不大,但是每个模块都要经过一番思考才能搞清其算法思想,只要有了算法思想,再加上C程序语言基础,基本完成功能,但是,每个模块不可能一次完成而没有一点错误,所以,我给自己定了一个初级目标:用C语言大体描述每个算法,然后经调试后改掉其中明显的错误,并且根据调试结果改正一些算法错误,当然,这一目标实现较难。最后,经过反复思考,看一下程序是否很完善,如果能够达到更完善当然最好。并非我们最初想到的算法就是最好的算法,所以,有事我们会而不得不在编写途中终止换用其他算法,但是,我认为这不是浪费时间,而是一种认识过程,在编写程序中遇到的问题会为我们以后编写程序积累经验,避免再犯同样的错误。但是,有的方法不适用于这个程序,或许会适用于另外一个程序。所以,探索的过程是成长的过程,是为成功做的铺垫。经过努力后获得成功,会更有成就感。

在课程设计过程中通过独立解决问题,首先分析设计题目中涉及到的数据类型,在我们学习的数据存储结构中不外乎线性存储结构及非线性存储结构,非线性存储结构中有树型,集合型,图型等存储结构,根据数据类型设计数据结点类型。然后根据设计题目的主要任务,设计出程序大体轮廓(包括子函数和主函数),然后对每个子函数进行大体设计,过程中错误在所难免,所以要经过仔细探索,对每个函数进行改进。

程序基本完成后,功能虽然齐全,但是程序是否完善(例如,输入数据时是否在其范围之内,所以加入判断语句是很有必要的)还需运行测试多次,如有发现应该对其进行改善,当然要在力所能及的前提下。

篇11:《数据结构与算法》课程设计的心得体会

经过这次课程设计,不但巩固了C语言、C++以及数据结构的知识,更加很好的将这三门专业课的知识融会贯通。

刚开始抽到这个题目的时候,看了好半天,不懂题目的意思,也找不到与书上哪种存储结构挂上钩,看到是游戏设计,心就有点慌了。看了几遍,在任务书的后面看了提示,慢慢的弄懂了是什么意思,一开始我想到了用矩阵这种存储结构,因为我想空间的点可以用矩阵这种存储结构来存储,矩阵的三元组法中可以定义行数和列数及非零元素的个数。我想先给矩阵赋初始值为0,当某个点有玩具时就可以将该点赋为1,表示有玩具。若矩阵中某两点横纵坐标都相等的话则半径为零,否则先求行与行间的最小距离,在求与下一行的最小距离,依次循环。后来想想玩具任意放的而矩阵只能存储整形这种数据类型,不能计算对于浮点型这种结构,后来想到想到用带有分量X和Y的结构体数组这种存储结构可以解决这种问题,而且利用分而治之的递归算法,使算法更简单一点。对于一个问题,需要多想,多方面考虑,不能仅仅只看到了它的一方面或两面,而要多方面观察。只有将所有的问题都考虑到了,这个程序才算完整的,没有缺陷的。就像操作系统,由原来的单处理机系统逐步变为多处理机系统,到现在的windows xp.。这些都是问题更加完善的过程。编写程序的过程和思想一样重要,对于刚开始编写的以及过后修改之后的,都要相互比对,将过去好的得到保留,不好的继续修改,最后得到比较完善的结果。

由于要设计完成这样一个比较复杂的程序,需要的不仅仅是课堂上书本上那些简单的知识,更需要我们去多方面的查阅资料,学会利用各种可能的资源,让自己自主的去学习。本程序中我经过查阅资料学会了系统的一些库函数的一些用法,像qsort(n1,n2,n3,n4),第一个参数为数组名即数组的首地址,第二个参数为数组的大小,第三个参数为数组元素的字节大小,第四个函数调用比较函数。用这种排序算法快儿准,节省了不少的时间。学会查阅资料也是一种需要培养的能力,无论基础知识学得有多牢固,也需要我们多看其他相关的书籍,查阅资料,找到更好的解决方法。让自己解决问题的能力更上一层楼。

在课程设计过程中有过因不知如何解决而忧愁,有过因同一个意思显示不同的结果而埋怨,有过因差一点点就成功了而不甘心,有过因解决问题而喜悦而自豪。经过这次的课程设计,真得是让我深深爱上了编写程序,调试程序。因为它给了我五彩的世界,充实的生活,有成就感的心情。当然,这次设计,过程中遇到了很多问题,有得已经通过各种方法得到了解决,但有的还需要继续查阅相关书籍。

现将课程设计中的收获简单的写在下面。

1.程序的设计思想的精巧的重要性,是不管怎么说都不为过的,好的设计可以让大家很快的明白你的思想,而且很方便的来实现它。

2.数据结构的课程设计不仅仅是编写完成一个程序那么简单,它要的是运用数据结构的思想设计一个即简单又方便的程序来完成课程设计任务书上要求的功能。

3.良好的编程习惯,它可以使你的程序很方便的被别人阅读,也很方便的被更改,所以可以的话,尽可能多的写出注释,没有人会闲你写的太多。

篇12:《数据结构与算法》课程设计的心得体会

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

一、课程设计目的

数据结构与算法课程设计是《数据结构与算法》课程教学必不可缺的一个重要环节,它可加深学生对该课程所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。通过课程设计,能够提高学生分析问题、解决问题,从而运用所学知识解决实际问题的能力,因而必须给予足够的重视。

2二、课程设计题目

2.1 棋盘覆盖

【间题描述】

在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

【基本要求】

(1)输入k以及特殊方格所在的行号dr和特殊方格的列号dc。

1(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个矩阵{A1,A2,...,An},其中Ai和Ai1是可乘的,i=1,2,„,n-1。考察这n个矩阵的连乘积A1A2,...,An,通过加括号方式,找出矩阵乘积所需的最少计算量的方法。

【基本要求】

输入每个矩阵的行和列,要求输出最少计算量的矩阵乘积方法,如(A1(A2(A3A4)))。【实现说明】 使用动态规划方法。

2.4 多边形游戏(*)

【问题描述】

多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。

游戏第1步,将一条边删除。随后n-1步按以下方式操作:

选择一条边E及由E连接着的2个顶点v1和v2;

用一个新的顶点取代边E及用E连接着的2个顶点v1和v2,将由顶点v1和v2的整数值通过边E上的运算得到的结果赋予新顶点。

最后,所有边都被删除,游戏结束。游戏的得分就是所剩顶点上的整数值。【基本要求】

设计该游戏供用户玩;

对于给定的多边形,给出最高得分计算。【实现说明】 使用动态规划方法。

2.5 0-1背包问题

【问题描述】

给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为c。问应如何选择装入背包种的物品,使得装入背包种物品的总价值最大。

【基本要求】

使用动态规划、回溯法以及分支界限三种方法实现。【测试数据】 【实现提示】

2.6 排序方法

【问题描述】

给定n个元素,要求对这n个元素进行排序。【基本要求】

使用多种排序方法,越多越好;

比较每种排序方法的时间复杂度和空间复杂度。【测试数据】 【实现提示】

2.7 哈夫曼编码译码器

【问题描述】

设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件

(压缩文件,后缀名.cod);反过来,可将一个压缩文件译码还原为一个文本文件(.txt)。

【基本要求】

(1)输入一个待压缩的英文文本文件,统计文本文件中各字符的个数作为权值,生成哈夫曼树;

(2)将文本文件利用哈夫曼树进行编码,生成压缩文件(后缀名cod)(3)输入一个待解压的压缩文件名称,并利用相应的哈夫曼树将编码序列译码。【实现说明】

(1)在构造哈夫曼树时,可以利用不同的线性表存放二叉树:用顺序表、单链表、5 循环单链表、双向链表、循环双链表;

(2)在构造哈夫曼树时,可以利用优先队列存放二叉树:顺序队列、链队列(可以是单链表、双链表等,还可以用静态结构去实现),可以分别在入队列或出队列时实现优先级;

(3)二叉树本身也可以用静态数组模拟;(4)使用贪心算法

2.8 迷宫问题(*)

【问题描述】

设计一个迷宫并给出正确走法。如: *** *** *** *** *** *** *** 其中0表示可以走,1表示不能走,每一步只能向上下左右移动。【基本要求】

(1)给出迷宫的正确走法,包括没有解的情况;(2)要求界面友好。【测试数据】

【实现提示】 使用回溯的方法。

2.9 继续邮资问题

【问题描述】

假设某国家发行了n种不同面值的邮票,并且规定每张信封上最多只允许贴m张邮票。连续邮资问题要求对于给定的n和m的值,给出邮票面值的最佳设计,在1张信封上贴出从邮资1开始,增量为1的最大连续邮资区间。

【基本要求】

输入任意的m和n都能设计出最佳的方案,并给出连续邮资区间。【实现说明】 【测试数据】

2.10 图的m着色问题

【问题描述】

给定一个地图,要求给出该地图的最少着色方案 【基本要求】

(1)把地图以及最少着色的方案显示出来则为良好。(2)有友好的界面则为优 【实现说明】

2.11 猜数字游戏(*)

【问题描述】

孩子想1个由4种颜色组成的序列(4种颜色不一定完全不同)。每种颜色只能是6种颜色之一。方便起见,我们用数字1到6表示6种颜色。

计算机必须根据孩子的回答找出孩子所想的颜色序列。计算机在屏幕上显示一个序列,孩子用键盘回答以下两个问题:

猜对的颜色中位置不对的有几个? 猜对的颜色中位置对的有几个? 【基本要求】

编程使至多6次问答后猜出序列,如果办不到,至多10次问答后猜出序列。【实现说明】 【测试数据】

如孩子想的是4655 计算机猜想 颜色对位置错的数目 颜色和位置都对的数目 1234 1 0 5156 2 1 6165 1 1 5625 1 2 5653 1 2 8 4655 0 4 2.12 大整数计算器

【问题描述】

设计一个计算器实现两个任意长得整数的加、减、乘、除。【基本要求】

设计一个实现任意长的整数进行四则运算的演示程序,要求输入任意长的整数进行四则运算,都能得到精确的结果。

【实现说明】

2.13 查找搜索技术

【问题描述】

给定任意的数组,对于给定的数,查找是否在数组中,如果在,则返回给定数在数组的位置,不在则返回不在信息。

【基本要求】

(1)使用多种搜索方法,越多越好,其中二分搜索技术、线性时间选择是必须的;(2)比较每种排序方法的时间复杂度和空间复杂度。【实现说明】

2.14 Tom,Jerry和奶酪(*)

【问题描述】

猫Tom和鼠Jerry同住在一矩阵地窖中。猫要吃鼠,鼠要吃奶酪。地窖中有2种地砖:有洞砖与无洞砖。一个洞足以让鼠钻入,但猫不能。

以菜单形式完成以下任务:

随机地生成一个地窖,并给猫、鼠和奶酪安排一个位置。如: fffffffffffffff fppppppppppppCf fhfffffffffffpf fpppjhppppppppf fpffffffpffffff fppppppppppTppf fffffffffffffff 其中c表示猫,j表示鼠,h表示洞,f表示不能通行(2)鼠先行,猫后行。两者皆满足以下规定: 1)必须上、下、左或右移动 2)鼠必须走1步(穿过p或h)3)猫必须走1或2步(穿过p)

(3)当鼠吃到奶酪或猫抓到鼠时,游戏结束。【基本要求】 【实现说明】

2.15 布线问题

【问题描述】

印刷电路板将布线区域划分成n×m个方格阵列,精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。在布线时,电路只能沿着直线或直角布线。为了避免线路相交,已布了线的方格做了封锁标记,其他线路不允许穿过被封锁的方格。

【基本要求】(1)解决题目的问题(2)提供友好的界面 【实现说明】 使用分支限界法。

2.16 魔方工具包(*)

【问题描述】

一个魔方是一个由3×3×3个小立方体组成的立方体。最初立方体的6个面分别涂上不同颜色,我们称之为“最初魔方”。魔方的每一面上的3×3个小立方体组成它的一层。

魔方所能见到的每一层(6个面)都能旋转90,180,220或360度。所有层的旋转轴都垂直于面且通过其中心。旋转的结果是另一个魔方,它的所有面的颜色都改变了。

现在我们用字符来代替颜色:U=上,D=下,F=前,B=后,L=左,R=右。任何一个序列的旋转都能表示成{U,R,F,B,L,D}中一些字符组成的字符串,其中每个字符表示它所 11 指定的面顺时针旋转90度。

【基本要求】

(1)编程完成以下3个任务(菜单形式),你可以假设任何输入的字串长度都<=35。你的算法能处理非法输入的情况,如: 输入 输出 L L LL LL LLL LLL LLLL “”(空串 LLLLL L LLRRRFFFFRLB LLLB HELLO “error”

(2)判断输入的2个字串的旋转结果是否相同。如 输入一 输入二 输出 RU UR no RRFFRRFFRRFFRRFF FFRRFFRR yes RRFFRRFFRRFFRRFF RRFFRRFF no(3)求出输入字符串至少须使用几次才能将魔方转回到“最初魔方”(一定大于0)输入 输出 L 4 12 DD 2 BULB 36 RUF 80 BLUFF 180 【实现说明】

2.17 图的建立与输出

【问题描述】

建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。

【基本要求】

给出图的深度优先和广度优先遍历算法,并给出遍历过程的动态演示效果 【实现说明】

2.18 图的建立与输出

【问题描述】

建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出 13 图的邻接矩阵。

【基本要求】

给出图的深度优先和广度优先遍历算法,并给出遍历过程的动态演示效果。【实现说明】

2.19 以队列实现的仿真技术预测理发馆的经营状况(*)

【问题描述】

理发馆一天的工作过程如下:

1)理发馆有N把理发椅,可同时为N位顾客进行理发。

2)理发师分三个等级(一级、二级、三级),对应不同的服务收费。3)当顾客进门时,需选择某级别理发师,只要该级别的理发师有空椅,则可立即坐下理发,否则需排队等候。

4)一旦该级别的理发师有顾客理发完离去,排在队头的顾客便可开始理发。5)若理发馆每天连续营业T分钟,求

(1)一天内顾客在理发馆内的平均逗留时间;(2)顾客排队等候理发的队列长度平均值;

(3)营业时间到点后仍需完成服务的收尾工作时间;(4)统计每天的营业额;

(5)统计每天不同级别理发师的创收。

【基本要求】

1)模拟理发馆一天的工作过程:必须采用事件驱动的离散模型(参考教科书3.5节离散事件模拟p65);

2)每个顾客到达和下一顾客到达时间的间隔应是随机的; 3)理发师编号、理发师级别和每天的营业时间由用户输入;

4)某顾客挑选某一个级别的理发师而不得时,选第一个队列排队等待 ;

5)每个顾客进门时将生成三个随机数:(1)durtime:进门顾客理发所需服务时间(简称:理发时间);(2)intertime:下一顾客将到达的时间间隔(简称:间隔时间);(3)select:服务选项。

6)服务收费:应包含服务时间和理发师级别两个因素。

7)除了输出统计的数据外,还需要显示理发馆的状态,可以采用文本方式(横向显示每张椅编号、理发师级别。纵向表示等待该理发师理发的排队长度)。【实现说明】

用户输入每位理发师编号、级别号和营业的时间,结合随机数进行测试。

2.20 防抄袭管理系统(*)

【问题描述】

对于给定的文档,如word文档,txt文档等,找出文档的相似度。【基本要求】

(1)要求找出给定的两个文档的相似度以及标出相似的地方(1:1);(2)要求找出给定的一个文档与给定的文件夹的所有文档的相似度,以及标出相似的地方(1:n)(3)要求找出给定的文件夹下面所有文档的相似度(n:n)。【实现说明】

给定相似文档进行测试。

2.21.设计一个停车场管理系统,模拟停车场的运作

设计要求:通过此程序具备以下功能:

1、要求以栈模拟停车场,以队列模拟车场 15 外的便道,按照从终端读入的输入数据序列进行模拟管理;

2、要求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻;

3、该系统完成以下功能:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费);

4、要求栈以顺序结构实现,队列以链表实现。

2.22. 赫夫曼编码

设计要求:自己找一篇不少于200个单词的英文文章,分析该文章中每一个字符的出现概率(包括标点符号,区分大小写),根据分析结果对文章中每一个字符进行赫夫曼编码,并将编码原则储于一个独立的文本文件中。最后,根据这个编码原则,将英文文章转换为01 串存储于一个文本文件中,再编写一个解码程序,将编码解码为原文件。如:英文文章为 aaabbc 则编码规则为 a-----0 b-----10 c-----11 英文文章将被转化为 000101011 2.23.并查集:检查网络

题目要求:给定一个计算机网络以及机器间的双向连线列表,每一条连线允许两端的计算机进行直接的文件传输,其他计算机间若存在一条连通路径,也可以进行间接的文件传输。请写出程序判断:任意指定两台计算机,它们之间是否可以进行文件传输? 输入要求:输入若干测试数据组成。对于每一组测试,第1行包含一个整数N(≤10000),即网络中计算机的总台数,因而每台计算机可用1到N之间的一个正整数表示。接下来的几行输入格式为I C1 C2或者 C或者C C1C2或者S,其中C1和C2是两台计算机的 16 序号,I表示在C1和C2间输入一条连线,C表示检查C1和C2间是否可以传输文件,S表示该组测试结束。

当N为0时,表示全部测试结束,不要对该数据做任何处理。

输出要求:对每一组C开头的测试,检查C1和C2间是否可以传输文件,若可以,则在一行中输出“yes”,否则输出“no”。

当读到S时,检查整个网络。若网络中任意两机器间都可以传输文件,则在一行中输出“The network is connected.”,否则输出“There are k components.”,其中k是网络中连通集的个数。

两组测试数据之间请输出一空行分隔。

2.24.教学计划编制问题(图的应用)

[问题描述] 大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。[实现提示]

1、输入参数应包括:学期总数,一学期的学分上限,每门课的课程号(可以是固定占3位的字母数字串)、学分和直接先修课的课程号。

2、应允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。

3、若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式可以自己设计。

4、可设学期总数不超过12,课程总数不超过100。如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。

============================= 17 2.25.药品销售统计系统(排序应用)

【问题描述】

设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或销售额做出排名。【实现提示】

在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。各药品的信息包括:药品编号、药名、药品单价、销出数量、销售额。药品编号共4位,采用字母和数字混合编号,如:A125,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采用基数排序法。对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。在本设计中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。

药品信息的元素类型定义: typedef struct node { char num[4];/*药品编号*/ char name[10];/*药品名称*/ float price;/*药品单价*/ int count;/*销售数量*/ float sale;/*本药品销售额*/ }DataType;存储药品信息的顺序表的定义: typedef struct { DataType r[MaxSize];int length;}SequenList;

2.26梯运行仿真程序

[问题描述] 办公大楼有若干层(例如,十层),每层有电梯,同时有步行楼梯;

全楼有若干部(例如,不多于10部)电梯同时供使用,电梯容量为24人,速度每上下一层需5秒,在某一层停下至少15秒。其运行状态可分:向上、向下、停止,当前乘客数,当前所在层数。它设有一个“按钮数组”,例如第五层的按钮按下,意味着有乘客在第5层到达目标层,等等。在楼的每一层,有电梯数,有按钮表示有人等待向上或向下,由若干人在等待,有若干电梯在本层停下,等等。

在大楼中(包括进出)的总人数不超过500 人,每个人站在电梯前有个目标层,他有一个最大的忍受等待时间,因为他可以选择电梯或是步行走楼梯,等等。

还有下面若干假设:在每个时间段要进大楼的人数在0~199 之间随机取值;

用电梯的每个人的目标层在1~10 之间取值;一个人在进电梯或改走楼梯之前的等待时间在180~360 秒范围内随机发生;一个人到达目标层后第二次再乘电梯中间的工作时间在400~6600 秒间随机取值。[基本要求] 编写一个程序,模拟办公大楼中全部电梯的工作过程。这个仿真程序可以用来监测系统运行情况,改善大楼管理,它也可以看成是一种游戏程序。

2.27国交通咨询模拟

[问题描述]

处于不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅 途中的时间尽可能的短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序,为旅客提供最优决策的交通咨询。

[基本要求]

(1)提供对城市信息进行编辑(如:添加或删除)的功能;

(2)城市之间有两种交通工具:火车或飞机,提供对全国城市交通图和列车时刻表及飞机航班表进行编辑的功能。(信息的输入方式可以是文件输入和键盘输入两种方式)

(3)提供两种最优决策:最快到达和最省钱到达。(选作:旅途中转次数最少的最优决策)

(4)旅途中耗费的总时间应该包括中转站的等候时间。

(5)咨询以用户和计算机的对话方式进行。

a)由用户输入起始站、终点站、最优决策原则和交通工具;

b)输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详 细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。

三、课程设计的基本要求

1.问题分析和任务定义。根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?

2.逻辑设计。对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图。

3.详细设计。定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作作出进一步的求精,20 写出数据存储结构的类型定义,写出函数形式的算法框架。

4.程序编码。把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚。

5.程序调试与测试。采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果。

6.结果分析。程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析。

7.编写课程设计报告并提交相关内容

设计最终需提交的内容包括:

A)课程设计报告(1份,A4纸打印,同时包括一份电子版)报告要求版面清晰,格式规范,否则重新编写。报告内容要求包括:

(1)问题的概述、分析及研究意义;(2)数据结构的逻辑设计和物理存储设计;(3)重要算法的设计、流程描述或伪代码描述;

(4)数据结构的时空复杂性分析以及重要算法的复杂性分析;

(5)程序最终实现结果(包括重点结果界面的抓取,能过说明问题的重要实验结果数据的打印或其可视化结果等)。

(6)参考文献(如果需要)。

(7)附录部分附上关键数据结构的定义及关键算法的源代码。

B)完整的程序系统(电子方式提交)

能够对输入产生相应的输出,同时尽量的完成可视化演示。

该部分包括源代码和可执行文件两个部分(提交的时候需清楚的注明个人姓名,班级)。

C)源程序文档(电子方式提交)

源程序代码要求结构清晰、可读性好。应对源程序中的类说明(如果采用面向对象方法设计),函数说明,接口说明,关键变量说明等进行注释;源程序要进行适当的缩进编排。

D)答辩报告(编写Power Point答辩报告,电子方式提交)要求突出重点,思路清晰。同时就此报告准备答辩。

E)所有以电子方式提交的文件全部存在一个目录中,并对其进行压缩(用Winrar或Winzip均 21 可),压缩后的文件按规定格式进行命名,命名格式为:学号+姓名.rar(如060701014石海杭.rar)。8.每位同学只能选择一个题目并完成

四、评分标准

1、基本功能:

50分。

通过功能的实现情况、界面的完成情况、软件的实现情况进行评分。

2、设计报告及使用说明书: 20分 按照报告的要求进行评分。

3、回答问题:

4、平时考勤:

5、核分标准:

15分 15分 100分

(90~100为优、80~89为良、70~79为中、60~69为及格、,60以下为不及格)

五、参考书目

严蔚敏.《数据结构》(C语言版).清华大学出版社 刘玉龙.《数据结构与算法》.电子工业出版社.严蔚敏等《数据结构题集》(C语言版).清华大学出版社

上一篇:有关春节趣事作文400字下一篇:体育督导评估自查报告