1.7 学好数据结构的秘诀

作为计算机专业的一名“老兵”,笔者从事数据结构和算法的研究已经20余年了,在学习的过程中遇到过很多问题,在解决问题时积累了一些经验,为了让读者在学习数据结构的过程中少走弯路,本节分享一些笔者在学习数据结构与算法时的经验,希望对读者的学习有所帮助。

1.明确数据结构的重要性,树立学好数据结构的信心

数据结构是计算机科学与技术专业的核心课程,不但涉及计算机硬件的研究范围,而且与计算机软件的研究有着密切的关系,“数据结构”课程还是操作系统、数据库原理、编译原理、人工智能、算法设计与分析等课程的基础。数据结构是计算机专业硕士研究生入学考试的必考科目之一,还是计算机软件水平考试、等级考试的必考内容之一,数据结构在计算机专业中的重要性不言而喻。

万事开头难,学习任何一样新东西,都是比较困难的。对于初学者来说,数据结构的确是一门不容易掌握的专业基础课,但你一定要树立学好数据结构的信心,主要困难无非有两个:一个是数据结构的概念比较抽象,不容易理解;另一个是没有熟练掌握一门程序设计语言。面对以上困难,只要我们见招拆招,其实也没有什么可怕的,不过选择一本适合自己的参考书是十分有必要的。

2.熟练掌握程序设计语言,变腐朽为神奇

程序设计语言是学习数据结构和算法的基础,很显然,没有良好的运用程序设计语言的能力,就不能很好地把算法用程序设计语言描述出来。算法思想固然重要,但它最终必须通过程序设计语言来实现,否则算法对程序开发人员来说毫无意义。程序开发人员的任务就是实现这些算法,将它变成可运行的软件,因此学习数据结构和算法必须熟练掌握至少一门高级程序设计语言,如Java、C、Python等。程序设计语言和数据结构、算法的关系就像是画笔和画家的关系一样,程序设计语言就是画笔,数据结构、算法就是画家的思想,即便画家的水平很高,如果不会使用画笔,再美的图画也无法展现出来。

3.结合生活实际,变抽象为具体

数据结构是一项把实际问题抽象化和进行复杂程序设计的工程。它不但要求学生具备Java、C、Python等高级程序设计语言的基础,而且要求学生掌握把复杂问题抽象成计算机能够解决的离散的数学模型的能力。在学习数据结构的过程中,要将各种结构与实际生活结合起来,把抽象的东西具体化,以便理解。例如学到队列时,很自然就会联想到火车站售票窗口前面排起的长队,这支长长的队伍其实就是队列的具体化,这样就很容易理解关于队列的概念,如队头、队尾、出队、入队等。

4.多思考,多上机实践

数据结构既是一门理论性很强的课程,又是一门实践性很强的课程。特别是对于初学者而言,接触到的算法相对较少,编写算法还不够熟练,俗话说“熟能生巧,勤能补拙”,在学习数据结构与算法时,一方面,需要多看有关算法和数据结构的图书,认真理解其中的思想,多做习题,不断巩固自己对一些概念和性质的理解;另一方面,需要自己动手写算法,并在计算机上调试,这样才能知道算法的思路是否正确,编写出的算法是否能够正确运行,存在哪些错误和缺陷,以避免今后再犯类似的错误,只有这样长期坚持下去,自己的算法和数据结构水平才能快速提高。

有的程序表面上看是正确的,在计算机上运行后才发现有隐藏的错误,特别是很细微的错误,只有多试几组数据,才能知道程序是否正确。因此,对于一个程序或算法,除了仔细阅读程序或算法、判断是否存在逻辑错误外,还需要上机调试,在可能出错的地方设置断点,单步跟踪调试程序,观察各变量的变化情况,才能找到具体哪个地方出了问题。有时,可能只是误输入了一个符号或把一个变量误写成另一个变量,就可能产生意想不到的错误结果;还有本来希望将一个栈中的栈顶元素返回,但是实际上在返回之前已经把该元素删除了,这样就无法得到正确的输出结果。这些错误往往不容易发现,只有上机调试才能发现。因此,在学习数据结构与算法的时候,一定要多上机实践。通过上机实践,不仅可以加深对理论知识的掌握程度,还能提高编程语言的应用技巧和调试水平,这是提高自身综合算法能力的过程。

只要能做到以上几点,选择一本好的数据结构教材或参考书(算法最好用Java、C、Python等语言实现,有完整代码),加上读者的勤奋,学好数据结构自然不在话下。

思政元素:在软件开发过程中,特别是在实现算法时,要保证算法的正确性和高效性。这些都考验着我们对算法思想的理解和对编程技术的掌握情况,一个小小的细节就可能决定算法是否正确,而找出其中的错误除了要求我们熟悉算法的思想外,还要求我们精通Java等语言及其调试技术。在学习数据结构的过程中,我们要以在各行各业做出卓越贡献的先进典型代表为榜样,学习他们精益求精、追求卓越的工匠精神和报国热情。例如导弹之父钱学森,两弹元勋邓稼先、钱三强、赵九章、孙家栋等,计算机汉字激光照排技术创始人王选,青蒿素治疗人类疟疾发明者屠呦呦,王码五笔发明者王永民,华为5G技术,比亚迪的王传福,等等,正是他们经历无数次失败,在工作中一丝不苟、精益求精,始终坚持科学真理与创新精神,才会有我国科学技术日新月异的飞速发展。在我们学习数据结构时,一是要学习利用数据结构知识进行抽象建模的方法,二是要掌握算法设计思想,三是要用Java、C、Python等语言实现算法,在算法实现过程中理解算法,熟悉调试技术,反复练习,才能百炼成钢。“科学的精神不是猜测、盲从、迷信、揣摩,而是通过真真实实的实践来研究和验证,从而得到相应的客观结果模型的好坏,协同产业界来实践相关的理念和模型。