数据结构基础铺垫篇
数据结构,我觉得是一门相当实用并且相当有难度的课程,所以需要理解需要剖析需要绞尽脑汁(大神例外),我尝试学习过多次,基本上以中途放弃而告终,每次都存在侥幸心理,感觉平常也使用不了多少数据结构的知识,即便使用,很多面向对象的高级语言都已经把轮子造好了,直接使用即可,例如Java中就存在集合框架(库)。
因此,详细学习数据结构相当有必要。首先,我们明白什么是数据?什么是结构?
以上提及的两个问题将贯穿整个学习过程,而且必须把这两个概念根深蒂固于脑海之中,将其转化为常识。所为常识,我想可能就是,心中无刀,手上亦无刀,但是可以轻而易举除害吧。
废话少说,进入主题。
“计算机”为什么被称为“计算机”?因为其最早出现的时候就是为了进行数值计算这个目的,那么你可能又会问:到底什么又是数值计算?其实看山就是山,看水就是水,只是偶尔水深偶尔水浅,我们看不清但又想看清(有些人说这是钻牛角尖,我个人看法这是对的),所以才会看山不是山,看水不是水,这个过程往往是最美的,就是我们现在正进行的过程。数值计算可以这样简单理解(也许不是那么准确),比如一个问题:求1+2=?:其中1、2就是数值,它们之间的加减乘除就是计算方法,它们合起来就是数值计算。
但是渐渐的,人们发现现实生活中经常遇到的问题往往不是数值计算问题(当然数值计算是计算机能解决的最本质的问题),比如:请将“sa7anpotuoqcn”字符串进行排序等等这些非数值计算问题,那么在解决这类问题的时候,往往需要借助一些有效的手段(比如表、树、图等数据结构),所以数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。也难怪老师在上课的时候经常会讲,程序设计=数据结构+算法。
有些基本概念,必须把握住,并且要精通。
数据结构中最核心的概念就是数据,那么什么是数据呢?
数据:是描述客观事物的符号,是计算机可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据可以是视频、音频这些。
数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。
数据项:一个数据元素可以由若干个数据项组成。数据项是数据不可分割的最小单位。
数据对象:是性质相同的数据元素的集合,是数据的子集。
数据结构:就是不同数据元素之间的关系。亦即相互之间存在一种或多种特定关系的数据元素的集合。
对于数据结构可以分为逻辑结构和物理结构。逻辑结构是指数据对象之间的相互关系;物理结构(存储结构)就是指数据的逻辑结构在计算机中的存储形式。
逻辑结构一般有四种:集合结构(一般不研究)、表、树、图。
物理结构一般有两种:顺序存储和链式存储。
说了上面的那些概念,顺便研究一下,数据类型,例如我们在编程的时候,会使用int,char等抽象数据类型(ADT),它本质是指一组性质相同的值的集合以及定义在此集合上的一些操作的总称。实际上,抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性,这是面向对象的程序设计思想的一部分。
我们来总结一下就是:数据由数据对象组成,数据对象就是一个对象,由数据元素组成,数据元素可能包含值或者操作,那些值和操作就是数据项。由此:数据结构是相互之间存在一种或多种特定关系的数据元素的集合(直接操作的往往就是数据元素)。