数据结构与算法——编程思想的核心,学生的噩梦

前几天,营子里有同学在抱怨数据结构与算法这门课难学,使我不禁想到了大学时学这门课痛苦不堪的心情,以及工作后的某一天对其作用茅塞顿开的情景。其实,数据结构与算法所传递的内容,正是编程思想(请参考我的笔记《编程初学者,要学好面向对象编程思想》)的根基。编程的思考过程非常像做菜,如果你有下

厨房的经验,可以试着想像你要露一手,做一道“宫保鸡丁”。编程就像做菜

首先,当你打算去做“宫保鸡丁”的时候,实际上是建立了一个目标、一个待解决的问题、一个问题空间……这对应了你要编的一个程序(比如给自己做一个能够分组的通讯录)。目标一旦确定,人脑会自动的去搜索相关的材料,开始思考做“宫保鸡丁”都需要哪些主料、辅料。鸡胸肉自然是主料,葱、花生米,糖、醋、酱油、盐、味精……这些是辅料,把这些东西统统准备好,之后“配菜”,配菜的过程要将鸡胸肉切丁,葱切段,各种调料调配均衡。从准备材料到配菜的整个过程,就是数据结构要考虑的问题。当你面对了一个要做的程序,首先也要考虑的就是程序问题空间模型如何用计算机数据模型来表示,也就是用什么样的数据(对象)来表示现实问题中的事物,比如还是刚才提到的“通讯录”的程序,一条通讯录联系人的记录需要包含姓名、年龄、性别等信息,你就必须思考用什么类型的数据去表示他们,从这个意义上说,学每种编程语言时(如C、C++、Java等)提到的基本数据类型,可以被视作是最简单的数据结构。当你去思考通讯录的分组功能时,自然会想到每条联系人之间和组之间的关系,那么“树”这个结构就应该会出现在你的脑海里。

作为编程思想的核心,考虑数据结构问题其实就是思考如何选用数据(对象)以及组织这些数据来表示现实问题,所以应该结合现实问题去学去思考,无奈学校课本理论太强,若老师又不能很好的结合实际问题去讲,那些线性表呀、链表呀、树呀、图呀的,一准儿把学生搞蒙。

这个宫保鸡丁还没做完,继续。当料备好,就要准备下锅了。是先放肉还是先放葱?多大火候?盖盖儿焖还是大火爆?……步骤和方法不同,同样的料炒出来的火候和味道也不同,这就是算法。算法需要思考的是如何处理数据(对象),使程序更加符合逻辑,更加高效。

个人认为,数据结构应该优先去学习,算法次之,理由是把鸡肉准备成了鸭肉就变成“宫保鸭丁”了,没可能把程序写好。

学好数据结构,就要训练自己时常用数据(对象)去表示现实问题,可以先从最简单的基本数据类型开始练习:数值类型如整型,字符串类型,布尔类型(很多语言没有这个类型,但是通过零和非零可以表示出来)这三种是我总结的最常用的三种基本数据类型(我这里的“基本数据类型”是从概念上的,而非具体语言,因为多数语言的基本数据类型中并没有字符串)。初学编程,像性别这样的现实问题,会很容易就使用了字符(串)类型来表示,使数据占用计算机内存空间变大(如果用布尔类型只需要一个字节),程序处理起来也麻烦,所以合理的选用数据(对象)类型去表示现实问题是基本功,此刻你看到这篇笔记的页面充满了无数的数据,你可以尝试思考思考。

另外,如果感兴趣,可以留个小题目给大家思考,问题是这样的:

需要用数据来表示一注足球彩票,足球彩票的规则如下:足球彩票

1、一共预测14场比赛的结果(胜、负、平)

2、如果主场球队胜利则用3表示,两队打平用1表示,主场球队失利用0表示

3、这样,一注彩票会是这个样子,例如“33110103003133”

要求,用合适的数据(结构)来表示一注彩票,让所占计算机内存空间尽可能小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章