第一篇:数据结构与算法课程设计 心得体会 学习体会(12)
课程设计心得体会
课程设计已经结束,怀着通过这次课程设计积累的信心与斗志,写下心得体会,为自己的奋斗留下痕迹,聊以缅怀。
刚开始拿到课程设计的任务书时,看到是 “单循环赛选手胜负序列求解问题”,题目只给了短短的几行内容:“有n个选手 P 1 ,P 2 ,P 3 ,„ ,P n 参加了的单循环赛,每对选手之
间非胜即负。现要求求出一个选手序列 P 1' ,P 2 ' ,P 3' ,„ ,P n ', 使其满足 P i'胜 P i+ 1 '(i=1,„ ,n-1)”。我的理解就是每个选手各遭遇一次,获胜得1分,失败不得分。
比赛结束时按照各选手之间的积分排名求解他们的胜负序列。
后来经过老师的指导,又有了另外一种理解,即可以根据比赛过程中各选手之间的胜负关系产生胜负序列,不过这种方法产生的胜负序列可能不是唯一的,但是实际情况是比赛结束时一定会产生一种胜负序列。为此需要用合适的数据结构进行存储,来确定如何产生胜负序列,选取哪位选手作为第一名,假如该选手已经在序列中,在后面的筛选过程中,如何将该选手排除等一系列问题。
有了思路后,就开始着手去设计算法,第一种情况采用的数据结构是类,将选手的编号、积分以及胜负过程中的积分处理等封装在类中。其中,以编号和积分作为私有成员,而设置编号、获胜处理、失败处理、获取积分、获取编号等作为公有成员。此时将该问题转化为对选手积分进行排序的问题。第二种情况采用的数据结构是有向图,将每个选手作为有向图的一个顶点,选手间的胜负关系作为有向弧,从箭头出发的一方作为获胜者,所以该问题转化为了有向图的深度遍历问题,即求解一条包含所有顶点的简单路径。在深度遍历过程中,以有向图的邻接矩阵作为存储结构。
在本实验中,为了使功能更完善,还用到了磁盘文件。可以将参赛选手的人数、他们之间的胜负关系预先放进一个记事本中,运行程序时被读入,在处理后将胜负序列读出到另一个记事本中,并保存起来。这里会用到输入、输出文件流的成员函数。
不过,在调试过程中出现了一些问题:
① 第一种情况时,以选手姓名作为私有成员时,由于权限问题,私有成员不能直接被调用,而主调函数中要求输入姓名,编译时一直出错。为了解决这个问题,另外定义了一个结构体,只放了选手姓名name,这样就可以使用了。在程序中只需要注意让选手姓名与积分对应起来就行了。同时,所得的胜负序列会读出到名为“比赛积分.txt”的文本文件中。② 在试探的路径中出现了编号的重复,也就是说有些点在试探成功后又被试探了,这显然是错误的,分析可知,这是由于在对结点的试探成功后并没有修改相应的标志数组中的相应位置,即让visited [i]=1,导致了重复试探。在入栈函数Push()中加入了入栈功能,此问题得以解决。同理在测试失败时也应该修改相应的标志位置。
③ 在从文件中读入参赛人数及胜负关系时,在记事本中格式为“4 w f f w f w”,第一次读入人数,在第二次读胜负关系时,“4”被重新读了一遍。为解决这个问题,老师指导时提及了fseek函数,但是从网上查到它只能在C语言中使用。因此,建立了两个记事本“Text1.txt”、“Text2.txt”,分别存放参赛人数和胜负关系,这样就不会出现问题了。临渊羡鱼,不如归而结网。这次课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在你的勇气和毅力下是抬不了头的。从做这个课程设计开始无论遇到什么困难,我都没有一丝的放弃的念头。出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知,我完成了这次单循环赛课程设计,不过这只是我学习路上的驿站,我会继续学习,古语有云:学无止境!
第二篇:数据结构与算法课程设计 心得体会 学习体会
课程设计的心得体会
刚一开始抽到题目,我一看觉得无从下手,由于那个时候很多课都还在进行着,也就是抽空思考一下思路,也到图书馆中借了相关的书来参考,但没有进行很深入的研究。课程设计开始的时候,我开始思考我该如何去求解,确定了算法之后,就开始写程序,修改错误,调试,直至完成,在这一过程中,让我学会了很多东西。
在课程设计结束后,我对书本,也就是我们的教材的认识有了很大的提高。以前我觉得能看懂书上的知识,能写出算法就认为自己学的还可以。可是通过课程设计,通过我对书上知识的研究,我发现其实书上有很多东西是我没有领略到的。我的算法的核心思想就是图的深度优先搜索遍历,在用邻接表对图完成存储之后,我就开始仔细的看书上有关图的遍历的知识,包括深度优先搜索遍历和广度优先搜索遍历,就那么几页纸,我看了不知道多少遍。刚一开始看一下,觉得自己会了,然后做程序,遇到问题再拿书看,没看一次我对算法的理解就更进了一步。通过这次课程设计,让我明白了书上的知识看似是很有限的,但它蕴含的东西值得我们去花更多的时间去研究。学知识不能只学表面的知识,做出一个深度优先搜索遍历程序不等于你就掌握了深度优先搜索遍历算法,其他知识也是这样,其他科目的学习也同样是这样。学习要抓住知识的精髓。
在课程设计这两个星期中,让我明白了独立思考的重要性。一个东西只有经过自己的思考,自己明白了才是真的明白了,别人说的再明白不等于我明白。在思考的过程中,我发现对一个问题,你思考的月深入,可以挖掘的东西就越多。我做的题目是分酒问题:三个酒杯,一个能装8kg,一个能装5kg,一个能装3kg,8kg是空的,5kg和3kg是满的,不借助其他工具,最终分出两个4kg。看似无从下手,但经过思考之后我确立了用图来求解,但是怎样抽象成图,抽象成什么样的图,模型确立后,图有很多种存储结构,采用哪一种存储结构是最优的等等问题都要去思考。最终我确定采用邻接表作为存储结构,图的深度优先搜索遍历来求解。
独立思考很重要,跟别人交流也很重要。在我和别人交流的时候,开阔了我的思维空间,很多原先我没想到的东西一下子就蹦出来了,而且能填补我知识的空白。跟老师交流就更重要了,以老师的知识层面和对问题的见解,他的想法具有很强的针对性和可行性。做好程序后,在写实验报告的时候,我发现在写实验报告的过程中,我对我的算法有了更进一步的认识,因为我要写出来,写出来的实验报告不仅我自己能看明白,更关键的是别人能看明白。这样就要求我用简练的语言来描述我的算法,而且对我的语言组织能力也是一次考验。
总之,这次课程设计让我对数据结构有了更深的认识,不仅体现在知识上,还体现在对知识的认识、对学习的认识和对方法的认识。
第三篇:数据结构与算法课程设计 心得体会 学习体会
课程设计的心得体会
陈康荫080401200708级计科系计本(2)班
完成了这次的二元多项式加减运算问题的课程设计后,我的心得体会很多,细细梳理一下,有以下几点:
1、程序的编写中的语法错误及修改
因为我在解决二元多项式问题中,使用了链表的方式建立的二元多项式,所以程序的空间是动态的生成的,而且链表可以灵活地添加或删除结点,所以使得程序得到简化。但是出现的语法问题主要在于子函数和变量的定义,降序排序,关键字和函数名称的书写,以及一些库函数的规范使用,这些问题均可以根据编译器的警告提示,对应的将其解决。
2、程序的设计中的逻辑问题及其调整
我在设计程序的过程中遇到许多问题,首先在选择数据结构的时候选择了链表,但是链表的排序比较困难,特别是在多关键字的情况下,在一种关键字确定了顺序以后,在第一关键字相同的时候,按某种顺序对第二关键字进行排序。在此程序中共涉及到3个量数,即:系数,x的指数和y的指数,而关键字排是按x的指数和y的指数来看,由于要求是降幂排序且含有2个关键字,所以我先选择x的指数作为第一关键字,先按x的降序来排序,当x的指数相同时,再以y为关键字,按照y的指数大小来进行降序排列。
另外,我在加法函数的编写过程中也遇到了大量的问题,由于要同时比较多个关键字,而且设计中涉及了数组和链表的综合运用,导致反复修改了很长的时间才完成了一个加法的设计。但是,现在仍然有一个问题存在:若以0为系数的项是首项则显示含有此项,但是运算后则自动消除此项,这样是正确的。但是当其不是首项的时候,加法函数在显示的时候有0为系数的项时,0前边不显示符号,当然,这样也可以理解成当系数为0时,忽略这一项。这也是本程序中一个不完美的地方。
我在设计减法函数的时候由于考虑不够充分就直接编写程序,走了很多弯路,不得不停下来仔细研究算法,后来发现由于前边的加法函数完全适用于减法,只不过是将二元多项式B的所有项取负再用加法函数即可,可见算法的重要性不低于程序本身。
3、程序的调试中的经验及体会
我在调试过程中,发生了许多小细节上的问题,它们提醒了自己在以后编程的时候要注意细节,即使是一个括号的遗漏或者一个字符的误写都会造成大量的错误,浪费许多时间去寻找并修改,总结的教训就是写程序的时候,一定要仔细、认真、专注。
我还有一个很深的体会就是格式和注释,由于平时不注意格式和注释这方面的要求,导致有的时候在检查和调试的时候很不方便。有的时候甚至刚刚完成一部分的编辑,结果一不注意,就忘记了这一部分程序的功能。修改的时候也有不小心误删的情况出现。如果注意格式风格,并且养成随手加注释的习惯,就能减少这些不必要的反复和波折。还有一点,就是在修改的时候,要注意修改前后的不同点在哪里,改后调试结果要在原有的基础上更加精确。
第四篇:数据结构与算法课程设计 心得体会 学习体会
课程设计的心得体会
每一次课程设计,都有不一样的感受,通过课程设计,对我而言,得到的不仅仅是知识,更是获得知识的方法,这显得更加的重要。
本次课程设计,我的设计题目是校园导游程序,本程序主要用到的是课本中图的知识,以校园中的景点作为顶点,以景点间的路径作为边,就构成了图。我用到的时临界表存储结构,这样对空间的浪费不至于很大。主要完成的功能是最短路径和所有路径的算法,最短路径用的是书上的Dijkstra算法,原来我对这个算法的只是出于一个对大致的过程知道的程度,课程设计之后,我对该算法可以说是很熟悉了,不管是算法思想还是代码。另一个主要功能是求两个景点间的所有路径,这个算法书上没有提到,我一步步的摸索,用了一个递归的思想,再经过不断的修改,一次次的单步运行,通过查看相应变量的变化情况,将此算法实现的。最后完成整个程序。
课程设计,本人感觉对于写程序,首先要要的是思想,即完成每个功能需要的算法思想,在想好思想后,就要具体到代码,计算机能够识别的代码,代码写好后,大多情况下是有错误的,首先要排除语法错误,然后时语义错误,在排错的过程中,我用到的最多的是单步运行,感觉单步运行这种方式很管用,通过一步步的运行,通过每一步的运行,观察其中变量的变化情况,可以很容易的知道代码是哪一步出了错误,这样对排错有很大的帮助。在课程设计的过程中,曾遇到过很多的问题,如对路径字符串的处理,整个递归一步步的往下调用和返回过程,还有很多细节的问题。在遇到问题时,首先想到的是自己思考,分析过程,查找资料,上网百度,通过自己的努力还没有解决时,这是首先需要问的是自己旁边的同学,和同学讨论,有时还争得面红耳赤,如果最后将此不下,就向老师提问。这课程设计的过程中,我几乎所有的问题处理流程就是这个样子的。我感觉这就是一种学习的方法,在学习中遇到难题时的学习方法,要把这种学习的方法变成一种习惯,这才是每次课程设计应达到的一种效果。
课程设计提供了这样一种学习的机会,可以随时随地向老师请教,和老师交流的一个机会,和同学互相讨论的机会。课程设计教会了我,如何用计算机程序来处理现实中的实际问题。将现实中的实际问题先转化为数学模型,然后将数学模型用程序解决的一种能力。
第五篇:数据结构与算法课程设计 心得体会 学习体会(42)
心得体会
通过本次课程设计,对图的概念有了一个新的认识,在学习离散数学的时候,总觉得图是很抽象的东西,但是在学习了《数据结构与算法》这门课程之后,我慢慢地体会到了其中的奥妙,图能够在计算机中存在,首先要捕捉他有哪些具体化、数字化的信息,比如说权值、顶点个数等,这也就说明了想要把生活中的信息转化到计算机中必须用数字来完整的构成一个信息库,而图的存在,又涉及到了顶点之间的联系。图分为有向图和无向图,而无向图又是有向图在权值双向相等下的一种特例,如何能在计算机中表示一个双向权值不同的图,这就是一件很巧妙的事情,经过了思考和老师同学的帮助,我用edges[i][j]=up和edges[j][i]=up就能实现了一个双向图信息的存储。
对整个程序而言,Dijkstra算法始终都是核心内容,其实这个算法在实际思考中并不难,也许我们谁都知道找一个路径最短的方法,及从顶点一步一步找最近的路线并与其直接距离相比较,但是,在计算机中实现这么一个很简单的想法就需要涉及到很多专业知识,为了完成设计,在前期工作中,基本都是以学习C语言为主,所以浪费了很多时间,比如说在程序中,删除顶点和增加顶点的模块中都有和建图模块相互重复的函数,但是由于技术的原因,只能做一些很累赘的函数,可见在调用知识点,我没有掌握好。不过,有了这次课程设计的经验和教训,我能够很清楚的对自己定一个合适的水平,而且在这次课程设计中我学会了运用两个新的函数sprintf()和包涵在#include