大二的第一学期有数据结构的课但是上课时候没有听得很清晰明了,可能是老师讲的快或者我有点呆……
开始自己整理一些东西,理一理思路,把课本上的模块过一遍。此系列的文作为我自己的学习笔记,同时作为交流和分享,希望大家多多指教,不胜感激。
引论
数据结构是什么?
书上说了很多很书面的概念,一看感觉好高大上啊~但是对于我这样一个小白来说,真的没有看懂这个到底是个啥。
下面是我个人对几个专业术语的理解(上例子):
1.数据:万物皆是数据。对就是这么“片面”。我们把一件事物用一些描述性的数字、符号等尽可能完整的表达出来,那这件事物就转化成了一堆数据。比如我们班同学的个人信息的集合表格就可以看做是一堆数据。
2.数据元素:数据就是由数据元素组成的,数据元素是数据的基本组成单位。接着上面的例子,这里的数据元素就是每一个人的各项信息的集合。
3.数据项:就是每一种数据,上例中的全部人的“姓名”一栏的信息就构成了“姓名”这一数据项。
4.数据对象:是具有相同性质的数据元素的集合。继续上面的例子,数据对象就可以是班级里所有已成年同学的信息的集合。(注意:这个集合里的每一个元素都必须要是一个数据元素)
5.数据结构:首先它是集合。(准确来说是由数据和关系构成的二元组)然后这个集合中的元素都是数据元素。而且这些数据元素之间存在着某种或多种特定关系。比如我们上面的例子:一个班里有班委会,班长管着班里的大事小事,然后下属有团支书、学习委员、文体委员等等。这样的一个班委会的几个人的集合连同这几个人之间的上下级关系构成了一个数据结构。
6.数据类型:总的来说就是两类:原子类型和结构类型。这里不用上面的例子了。我们平时定义的int、double类就是原子类型,已经不能再向下细分了。另一种就是我们常用的链表的节点(结构体种,一个数据元素中往往包含着数据域,指针域的数据类型。可以继续细分的,称为结构类型。
下面还有一个我觉得可能需要单独拿出来看的东西(虽然课本上是把它和以上的6个术语放一起说的),就是抽象。
抽象二字一开始给我的感觉是晦涩难懂。比如我们说,啊什么什么东西很抽象,那意思可能就是这个东西很难懂,比如抽象画(原谅我可能真的没有什么艺术细胞,至今仍然没有真正看懂过任意一幅抽象画)……
但我个人觉得,抽象的意思是把某一个东西给简化描述,去掉不必要的、冗余的修饰——甚至可以是去掉任何修饰,一步步更靠近事物的本质。
举个例子:女朋友新买了防水浓密型摩天翘睫毛膏,程序员男友对这款睫毛膏的逐步抽象看法是酱紫的:
XXXX牌防水浓密型的摩天翘睫毛膏->抽象一下->睫毛膏->再抽象一下->黑色混油胶质涂料->再抽象一下->黑色涂料->再抽象一下->涂料
抽象结束。鉴定这款花了好几百大洋的传说中的爆款睫毛膏,本质上就是6ml涂料。
但是,千万不要眉飞色舞的把你的抽象思维的结果说出来,不然不管你抽象抽的多好都会被抽的。
除非女朋友也是程序员。
说回正题。程序设计的规模在不断增大,所以我们不可能总是从最底层开始做开发,这样的开发是毫无意义的而且是极其耗费时间、人力的。所以为了应对日益增长的软件的复杂度问题,程序的设计语言也在不断的“进化”:机器语言->汇编语言->高级语言->非过程化语言(即面向对象语言)。“进化”的过程其实就是不断抽象的过程。
因为我在正式看这本书之前已经接触了一点objective—c和python的知识,所以对于抽象的思维有一点自己的感觉,概括来说,数据结构就是对实体的数据进行抽象化处理以便于用计算机去处理数据的。
我手里的课本在这节后面还有一点关于ADT(抽象数据类型)的介绍,但是对于目前的知识这一块来说,个人感觉并没有很大的帮助,等到总结到后面有需要的时候再说明。
才疏学浅,如有错漏,恳请指教,不甚感激。
部分引用《数据结构与算法》——人民邮电出版社