学习数据结构的原因&方法 原

问题:数据结构是干什么用的呢? 我们这学期开数据结构C语言版,已经过去半学期了,还是没有头绪。去年已经学过C与C++了,觉得已经可以编写程序了呀?然后我们为什么还要学习数据结构呢?学习什么链表,插入删除数据,看代码,觉得很复杂。这是干什么用的呢?C或C++里不就已经可以插入数据,存储数据么?建个数组,运用指针不就可以很方便么?还要费这劳什子自己写一大串代码就是为了建个链表能存两个数据? 回答一: 链表的好处在于不用使用连续的内存,而是利用内存中分散的存储单元存储数据;而且链表的长度是可以任意增删的,但数组一旦申请就不能改变,这根本不能满足数据的动态存储;再加上数组的删除和插入元素会使大片的数据进行移动,这就增加了运算量; 好好学吧,刚开始我也觉得稀里糊涂的,但考研不得不再看了几遍,觉的数据结构的思想还是很好的,不说各种排序和图、二叉树的算法设计,单单一个栈就是很深奥的,他可以将一些复杂难懂的递归算法,拆解改写,让你对这些算法一目了然。自己好好体会吧,有些东西并不向你看到的那么简单。 回答二: 数据结构是一种思想工具,就像我们用杯子喝水,用筷子吃饭一样,这里的杯子和筷子就是数据结构,如果我们不具有这样的思想,那我们只能趴下喝河水,用手抓东西吃。 举一个例子,假如我们要做一个锤子(金工实习的那种),我们需要什么,仅有两块铁行吗?不行的,我们必须还要有车床,还要有砂纸等工具。所以我们要制作锤子,就要具有一定的工具。现在又有一个问题提出来了,可以不用工具吗?可以,但是你会浪费很多的时间和精力。数据结构就是为了制作工具而发明的,有了工具,解决问题就容易的多了。 再来一个程序例子: 假如我们在c语言的学习中,没有学习数组(数组就是一种数据结构),我们要对10个数进行排序,我们要怎么做。至少你得定义10个变量,int i1~i10,然后就是大量的重复劳动,并且这个过程很容易把人给搞昏掉。但如果我们用数组做的话,问题就显得容易的多了,我们对数据的操作,直接可以用数组下标来实现,这大大提高了程序的编写效率。这就数据结构的魅力! 回答三: 程序不是用来玩的,或者说大部分有用的程序都是用来处理数据的,你做个mp3播放器,你如何给mp3解码?你需要把音乐的代码放到内存里,然后在解码,数据如何在内存里存储?这就是数据结构。 对于链表,如果你需要高速处理数据,比如做个mp3播放器,你要删除一部分错误的音乐代码,并且这些代码很随 机的排列在数据中,要是用数组的话:1在该地址填无用代码(内存不释放)2删除该数组中这些成员,把数组重新排列一下运用链表的话就很简单了 把指针一改,ok!

一、打好基本功     不管学习什么,概念是基础,所有的知识框架都是建立在基础概念之上的。所以,第一遍看课本要将概念熟记于心,然后构建知识框架。比如看了一遍书后你至少应该知道数据结构包括线性结构、树形结构、图状结构或网状结构。线性结构包括线性表、栈、队列、串、数组、广义表等,栈和队列是操作受限的线性表,串的数据对象约束为字符集,数组和广义表是对线性表的扩展:表中的数据元素本身也是一个数据结构。除了线性表以外,栈是重点,因为栈和递归紧密相连,递归是程序设计中很重要的一种工具。树状结构中的重点自然是二叉树和哈弗曼树了。对于二叉树的很多操作都是基于对二叉树的遍历,掌握了如何遍历,很多问题也就迎刃而解了,比如对二叉树结点的查找访问、统计二叉树中叶子结点的数目、求二叉树的深度等。哈弗曼编码也有着很广泛的应用。对于图状结构,主要学习图的存储结构及图的遍历。 二、不能看不起自己 “我能行!”     个人觉得这句话非常重要,不知道大家是怎样看待数据结构这门课的,有多少人觉得数据结构很难呢?我知道还是有一些同学这样觉得的,有时候我跟我的朋友讲要怎样学,讲了一大堆以后,他就向我抱怨:我以前c++都没有学好,数据结构更学不好了,这哪跟哪的话啊,数据结构与c++没有什么关系,我想假如抱有这样的心态,自己就不相信自己,那是不可能学好的,那些觉得数据结构很难的同学,我想他们应该会很看重数据结构的吧,然后他们就一天到晚捧着一本数据结构,这样不会觉得很累吗?而且因为觉得很难,就容易不相信自己,学的效率也不会很好,或许这有点太妄自菲薄了吧。个人认为数据结构很好学,很容易学,因为我觉得很容易,当然就会觉得自己没问题,学得很轻松,效果也还可以。大家都是从高考走过来的,应该知道心态的重要性吧,两种不同的心态,完全就是两种不同的效果。学习数据结构我们到底要学些什么呢?不知道大家有没有想过,那现在我们现在来归纳一下我们学习的内容吧,其实我们也就学了几种普通的数据结构,像二叉树,树,图还有排序的问题,前面的线性表和字符串也就是一些概念,当然还有一个很重要的KMP算法,然后在每种数据结构中我们也就是学到了若干处理的算法,我想真正数起来也就是几十个算法吧。学习数据结构也就是要掌握这几十种算法,多简单!至于如何掌握每个算法呢,我想就是多看看书,重要的是能够理解。个人认为,学习的难易程度很大程度上决定于个人的兴趣。把一件事情当做任务去做会很痛苦,当做兴趣去做会很快乐。如果想让自己在学习数据结构的过程中更轻松一些,就应该先培养对这门学科的兴趣。 三、坚持独自完成作业的好习惯     有一些同学总是喜欢先问好别人算法,然后再自己写,虽然这个不算抄袭作业,但自己基本上没有一个思考问题的过程,虽然要理解算法也会要思考很多,但是因为没有自己独立的思考过程,要自己写程序、写算法的时候根本写不出来,所以我想如果真的想学好数据结构的话,最好是能够自己思考问题,不要刚想了一会就觉得做不出来,然后就去问其他人。其实老师给我们的作业大多数还是基于我们的水平的,我绝对相信我们自己能够独自想出算法,虽有可能会比较长时间吧,但是这样肯定会比问其他人学到更多的东西。当然我并不是说不要问同学,有时候就是脑筋转不过来,一问别人就懂了,当然问了别人不能只是我知道了这个算法,还应该去想如何思考才能得到这个算法,这样水平会提高很多。 对算法的学习是学习数据结构的关键。在看课本的过程中,要注重对算法的掌握。对于一个算法,读一遍可能能读懂,但不可能完全领会其中的思想。掌握一个算法,并不是说将算法背过,而是掌握算法的思想。我们需要的是耐心。每看一遍就会有这一遍的收获。读懂算法之后,自己再默写算法,写到不会的地方,看看课本想想自己为什么没有想到。反复练习,直到能顺利写出算法为止。个人认为,这是行之有效的方法。这样,不仅可以更加深入的领会算法思想,还会逐渐发现算法的巧妙之处,从而对数据结构产生兴趣。 四、多动手实验     这个就没有太多理由了,我一直觉得编程是一门熟练科学,多编程,水平肯定会提高,最重要的是能够养成一种感觉,就是对程序对算法的敏感,为什么那些牛人看一个算法一下子就看懂了?而自己要看很久才能弄懂,而且弄懂了过了一阵子又忘记了?其实这个是因为牛人们以前看的程序很多,编得也很多,所以他们有了那种感觉,所以我觉得大家应该多看程序,多写程序,培养自己的感觉。数据结构是实践很强的一门课程,光是“听”和“读”是绝对不够的,必须加强实践。在写算法的过程中,可能会出现很多问题,而不断修改的过程便是学习的过程。在这个过程中,只要全身心的投入了,便会发现很多乐趣。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

怎样才能学好java?

Java是一种计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发,是目前用的最广的语言之一,在编程语言排行榜多次...

3005
来自专栏专注研发

poj-1006-Biorhythms

人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如...

961
来自专栏趣学算法

数据结构学习秘籍

网络上太多的同学吐槽被虐,如滔滔江水连绵不绝,数据结构太难了!真的很难吗?其实数据结构只是讲了三种:线性结构、树、图。到底难在哪里呢?通过调查了解大概有四个原因...

1192
来自专栏C语言及其他语言

初学C语言的学习计划

背景:很多同学在学习C语言的过程中,常常会遇到这样的问题,即“教材看完了,知识点也懂,但写不出来程序”,这段时间,我们通过长期与有多年C语言研究经验的教授、教师...

3634
来自专栏专知

关关的刷题日记10——Leetcode 1. Two Sum 方法1

关小刷刷题10 – Leetcode 1. Two Sum 方法1 题目 Given an array of integers, return indices ...

3059
来自专栏Code_iOS

数据结构?

数据结构可以实现一种或多种抽象数据类型,而抽象数据类型(Abstract Data Type [ADT])就是一种数学的抽象,一些操作的集合【插入、删除等操作】...

1332
来自专栏desperate633

LintCode 买卖股票的最佳时机 II题目分析代码

假设有一个数组,它的第i个元素是一个给定的股票在第i天的价格。设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交...

611
来自专栏noteless

抽象工厂模式 创建型 设计模式(四)

所有的ConcreteCreator的返回类型都是Product,因为抽象工厂角色Creator就是返回Product 

592
来自专栏大数据钻研

JavaScript 世界万物诞生记

一. 无中生有 起初,什么都没有。 造物主说:没有东西本身也是一种东西啊,于是就有了null: ? 现在我们要造点儿东西出来。但是没有原料怎么办? 有一个声音说...

3428
来自专栏数据结构与算法

1074 食物链 2001年NOI全国竞赛

1074 食物链 2001年NOI全国竞赛 时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Des...

3506

扫码关注云+社区

领取腾讯云代金券