
学习数据结构的心得体会
数据结构学习体会及教学建议时间过的很快,一转眼一学期的数据结构课程就已经快要告一段落了,在接触这么课以前,我觉得编程无非就是会写代码就好了。
然而事实上数据结构对于程序来说,有着非常重要的地位。
随着计算机应用领域的不断扩大,非数值计算的问题占据了当今计算机应用的绝大部分,简单的数据类型已经远远不能满足需要,个数据元素之间的复杂关系已经不是普通数学方程式能够表达的了,所以数据结构就扮演了十分重要的角色。
在学期初,我觉得数据结构还是比较简单的,但可能由于之前c语言学习对指针掌握的不够熟练,导致在数据结构中接触到与指针有关的问题,例如线性表,堆栈,队列,二叉树等问题的时候,都会显得有些吃力。
但是在不断学习数据结构的过程中我也不断加强了对指针的学习,现在我已经能够基本掌握指针的相关知识并且能够熟练运用了。
这一学期的学习下来我发现想要学好数据结构有以下几点经验{虽然可能我的数据结构学的并不是很好}1.初步了解算法思想、原理想要弄清楚一个算法的实现,首先要知道这个算法的大致原理,这是最简单的一步,也是最基础的一步,只有明白算法想要干什么,才能弄清楚相应的代码段是为什么2.钻研课本代码段对于书上的算法代码,我们一定要仔细钻研每一步的具体含义和目的,在此基础上深入的了解算法的实现过程,而不是一味的四级硬背,不仅无聊,而且效率低下。
3.查找各种算法资料例如排序算法,其实历史上有很多不同的排序算法,书上
数据结构与算法的学习心得
数据结构与算法是相辅相成的,每一种数据结构都有它对应的几种常用算法,数据结构与算法必须同时学。
按照书上的顺序学习,通常是链表→队列→堆栈→树→图的顺序,难度循序渐进。
一定要自己上机实验
学习数据结构与算法课程有用吗
首先,这两门课程对于编程而言是非常重要的,但由于大学课程安排的不合理性以及学生自身的编程差异,对于未深入研究过编程的人或者未参与过项目开发的人而言,课程缺乏足够的吸引力。
通俗而粗略的讲数据结构可提高程序本身的健壮性以及灵活性,无关任何编程语言;操作系统有助于你开发基于操作系统的各类应用,要知道绝大多数的程序都是基于操作系统的,再者类似内存分配、存储空间的分配等细节也因操作系统不同而不同。
我个人感觉是,这两门课程对于大多数学生而言是缺乏实际意义的,但如果你从事过一段编程工作后再返回学习两门课程会有更深入的体会。
希望我的回答可以帮助到你。
怎么学好数据结构与算法,好难啊
先学好语言,这是学习的基础。
有些算法书上在学习语言部分会有一点算法包含在内,比如递归。
要学算法,先练好递归,这会对你深入学习其他算法有很大的帮助。
树形结构是数据结构中较难的部分,也是数据结构的基础,主要靠练。
还有就是,不要总是学习理论,合上书本认真地把算法用代码和实现是最重要的。
不要背代码,没用的,注重理解。
刚开始会有些不习惯,学得多了就好了。
-------------------------------------------------------------------------------------------内容出自希望对你有帮助1. 程序 = 数据结构 + 算法 2. 学习:刚开始看时肯定会有些不清楚,因为你是刚学完 语言,对语言还不太熟练。
你学习数据结构时找一本经典的数据结构书,看完一个数据结构后用语言将其实现。
开始时的实现肯定会有困难,那么请百度下会有很多优秀的数据结构源码的。
你可以模仿这些优秀的源码写。
请记住一定要开始时自己实现,当被卡住了就看一下源码,看看自己被卡在了什么地方,引起注意以便下次自己会写。
当你把书上的数据结构源码写了一遍之后,你已经超过了你绝大部分的同学。
3. 运用: 这时你就需要对这些数据结构加以运用,你可以在百度上搜索“某个数据结构 + ACM”,你就会看到一些题目,这些题目都是数据结构的运用,甚至有这些数据结构的变形。
每种数据结构做5题左右。
期间你还会遇到程序另一重要的方面算法,有不会的就 百度。
期间可以学到的数据结构和算法做小软件玩儿,例如压缩软件,五子棋之类的。
4. 深入: 当你完成了第三步你已经是你们学校的小高手了。
这时看你的方向如果这时发现自己喜欢 ACM 的话就去搞 ACM,如果不感兴趣,就找自己感兴趣的技术学习一下,做几个完整的项目,例如写个编译器,或者实现一个简单的编程语言。
总结:无论选择哪条道路只要按照这些做了,你毕业后肯定会成为抢手货。
-------------------------------------------------------------------------------------------也就这样了:时间并不会因为你的迷茫和迟疑而停留,就在你看这篇文章的同时,不知道有多少人在冥思苦想,在为算法废寝忘食,不知道有多少人在狂热地拍着代码,不知道又有多少提交一遍又一遍地刷新着OJ的status页面…… 没有谁生来就是神牛,而千里之行,始于足下
我期盼NOIP一等榜上有你(虽然我不知道你叫什么)。
算法课程设计报告
本人乃一个数据痴迷者,在计算机的道路上,也是一个数据结构的痴迷者,现在大学里面和同学搞开发也痴迷于数据库,我就我个人的理解给你谈一谈:\ 首先,数据结构是一门计算机语言学的基础学科,它不属于任何一门语言,其体现的是几乎所有标准语言的算法的思想。
\ 上面的概念有一些模糊,我们现在来具体说一说,相信你门的数据结构使用的是一门具体的语言比如C\\\/C++语言来说明,那是为了辅助的学习数据结构,而数据结构本身不属于任何语言(相信你把书上的程序敲到电脑里面是不能通过的吧,其只是描述了过程,要调试程序,还需要修改和增加一些东西)。
你们的书上开始应该在讲究数据的物理存储结构\\\/逻辑存储结构等概念,说明数据结构首先就是“数据的结构”,在内存上的存储方式,就是物理的存储结构,在程序使用人员的思想上它是逻辑的,比如:\ 你们在C\\\/C++中学习到链表,那么链表是什么一个概念,你们使用指针制向下一个结点的首地址,让他们串联起来,形成一个接一个的结点,就像显示生活中的火车一样。
而这只是对于程序员的概念,但是在内存中存储的方式是怎样的那
对于你程序员来说这是“透明”的,其内部分配空间在那里,都是随机的,而内存中也没有一个又一根的线将他们串联起来,所以,这是一个物理与逻辑的概念,对于我们程序员只需要知道这些就可以了,而我们主要要研究的是“逻辑结构”。
\ 我可以给你一个我自己总结的一个概念:所有的算法必须基于数据结构生存。
也就是说,我们对于任何算法的编写,必须依赖一个已经存在的数据结构来对它进行操作,数据结构成为算法的操作对象,这也是为什么算法和数据结构两门分类不分家的概念,算法在没有数据结构的情况下,没有任何存在的意义;而数据结构没有算法就等于是一个尸体而没有灵魂。
估计这个对于算法的初学者可能有点晕,我们在具体的说一些东西吧:\ 我们在数据结构中最简单的是什么:我个人把书籍中线性表更加细化一层(这里是为了便于理解在这样说的):单个元素,比如:int i;这个i就是一个数据结构,它是一个什么样的数据结构,就是一个类型为int的变量,我们可以对它进行加法\\\/减法\\\/乘法\\\/除法\\\/自加等等一系列操作,当然对于单个元素我们对它的数据结构和算法的研究没有什么意义,因为它本来就是原子的,某些具体运算上可能算法存在比较小的差异;而提升一个层次:就是我们的线性表(一般包含有:顺序表\\\/链表)那么我们研究这样两种数据结构主要就是要研究它的什么东西那
一般我们主要研究他们以结构为单位(就是结点)的增加\\\/删除\\\/修改\\\/检索(查询)四个操作(为什么有这样的操作,我在下面说到),我们一般把“增加\\\/删除\\\/修改”都把它称为更新,对于一个结点,若要进行更新一类的操作比如:删除,对于顺序表来说是使用下标访问方式,那么我们在删除了一个元素后需要将这个元素后的所有元素后的所有元素全部向前移动,这个时间是对于越长的顺序表,时间越长的,而对于链表,没有顺序的概念,其删除元素只需要将前一个结点的指针指向被删除点的下一个结点,将空间使用free()函数进行释放,还原给操作系统。
当执行检索操作的时候,由于顺序表直接使用下标进行随机访问,而链表需要从头开始访问一一匹配才可以得到使用的元素,这个时间也是和链表的结点个数成正比的。
所以我们每一种数据结构对于不同的算法会产生不同的效果,各自没有绝对的好,也没有绝对的不好,他们都有自己的应用价值和方式;这样我们就可以在实际的项目开发中,对于内部的算法时间和空间以及项目所能提供的硬件能力进行综合评估,以让自己的算法能够更加好。
\ (在这里只提到了基于数据结构的一个方面就是:速度,其实算法的要素还应该包括:稳定性、健壮性、正确性、有穷性、可理解性、有输入和输出等等)\ 为什么要以结点方式进行这些乱七八糟的操作那
首先明确一个概念就是:对于过程化程序设计语言所提供的都是一些基础第一信息,比如一些关键字\\\/保留字\\\/运算符\\\/分界符。
而我们需要用程序解决现实生活中的问题,比如我们要程序记录某公司人员的情况变化,那么人员这个数据类型,在程序设计语言中是没有的,那么我们需要对人员的内部信息定义(不可能完全,只是我们需要那些就定义那些),比如:年龄\\\/性别\\\/姓名\\\/出生日期\\\/民族\\\/工作单位\\\/职称\\\/职务\\\/工资状态等,那么就可以用一些C\\\/C++语言描述了,如年龄我们就可以进行如下定义:\ int age;\\\/*age变量,表示人员公司人员的年龄*\\\/\ 同理进行其他的定义,我们用结构体或类把他们封装成自定义数据类型或类的形式,这样用他们定义的就是一个人的对象的了,它内部包含了很多的模板数据了。
\ 我就我个人的经历估计的代码量应该10000以内的(我个人的经理:只是建议,从你的第一行代码开始算,不论程序正确与否,不论那一门语言,作为一个标准程序员需要十万行的代码的功底(这个是我在大学二年级感觉有一定时候的大致数据,不一定适合其他人),而十万行代码功底一般需要四门基础远支撑,若老师没有教,可以自学一些语言)。
算法和数据结构的关系
记得网上曾经有一个帖子,大概的列出了学习ACM来说需要的知识背景。
如果不是牛人,或者天生受虐倾向,普通人看到了都会晕倒,多达100多个科目(全部需要数学背景)。
楼主觉得你能学的过来吗
但是,所有的算法,乃至数学在实际运用中都是要根据不同的数据来选择不同的方法,所以一般学习过算法和数据结构的人都会越发的认识到,数据才是程序的中心,只有找到了一个组织数据的最佳方式,算法的运用才会事半功倍。
比如我印象最深刻的是在大二时做的一道题目:判断一个输入的数是否符合科学计算法。
如e*103,-30.90*103就不是。
这样一道题,如果用普通的数组线性存储,然后逐一判断,效率的算法的复杂度都是不合格的。
有限状态机则清晰明了的解决了这个问题。
即把所有可能的状态和状态的转换画成一个矩阵,然后每读取一个输入的字符就在这些状态中跳转,直到最后一个字符为止,判断最终状态是有效还是无效状态。
总而言之:数据结构是问题的核心,是算法的基础。
建议楼主先磨好数据结构这把剑,对算法也不用着急,毕竟很多的数据结构的书中都有一些基础算法的介绍的。
为什么学了c之后《数据结构与算法——c语言描述》还是看不懂
因为它是伪代码……不是真实的代码……所以比较抽象。
数据结构与算法偏重于表达思想、思路,用伪代码可以忽略一些实现细节,真正要实现可能还需要在伪代码的基础上再写很多辅助的代码。
可以找一些用真实代码讲数据结构的书来看,这样可能理解起来就好很多。



