1.什么是数据结构?
当我们遇到一个实际问题时,首先需要解决两件事:
(1)如何将数据存储在计算机中;
(2)用什么方法和策略解决问题。
前者是数据结构,后者是算法。只有数据结构没有算法,相当于只把数据存储在计算机中,而没有有效的方法去处理,就像一栋只有框架的烂尾楼;若只有算法没有数据结构,就像沙漠里面的海市蜃楼,只不过是空中楼阁罢了。
在我们开始学习数据结构和算法之前,我们先从总体上来了解一下什么是数据结构和算法。顾名思义,数据是一切输入计算机中信息的总和,结构是指数据之间的关系。数据结构就是将数据及其之间的关系有效的存储在计算机中并进行基本操作。而算法就是对特定问题求解步骤的一种描述,通俗的讲就是解决问题的方法和策略。在遇到实际问题时,要充分利用自己所学的数据结构,将数据及其之间的关系有效地存储在计算机中,然后选择合适的算法策略,并用程序高效地实现。这就是Niklaus Wirth教授所说的:
程序=数据结构+算法
呃呃呃,感觉好深奥......但是,我们学习编程,想成为编程大神,那么我们就一定要精通数据结构跟算法。我们先来举一个生活中的例子:如果给你一堆书你会怎么放?这还不简单,想怎么放就怎么放。如果书不多,我们一般是一本挨着一本的放着。那么要是书的规模很大呢?如学校图书馆里面的书如果是按上述一本一本的放,那么以后需要找书的时候是不是累死人了。如下图:
所以如何摆书我们需要首先考虑是书的规模。如果书很少,我们直接摆就行了,如果书很多,我们又该怎么办呢?同学们可以说说嘛?这就好比我们做题目的时候,如果数据不是很大,我们暴力枚举就可以了,如果数据太大的话,你可能就要寻找别的方法了。
学习数据结构,我们需要从几个概念入手。首先什么是数据?
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合,包括文本、声音、图像等等。在我们的例子里面,所谓的数据就是图书馆中所有的书。
数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。在我们的例子里面,数据元素指的就是书。
数据项:一个数据元素可以由若干个数据项组成。在我们的例子里面,数据项其实就是书名、作者、出版社等等。
数据对象:是性质相同的数据元素的集合,是数据的子集。在我们的例子里面,其实就是某一类书,例如《信息学奥赛一本通》和《信息学奥赛课课通》就是同一类书籍。
了解了什么是数据之后,那结构又是什么呢?所谓的结构,简单的理解就是指关系。严格的说,结构是指各个组成部分互相搭配和排列的方式。在现实生活中,不同数据元素之间不是独立的,而是存在特定关系的,我们把这种关系称为结构。那数据结构是什么呢?
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
为编写出一个“完美”的程序,必须认真分析待处理对象的特性及各处理对象之间存在的关系。这也就是研究数据结构的意义。根据不同的角度,我们把数据结构分为逻辑结构和物理结构。
逻辑结构:是指数据对象中数据元素之间的相互关系。包括集合结构、线性结构、树形结构、图形结构。
集合结构∶集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。各个数据元素是"平等"的,它们的共同属性是"同属于一个集合"。数据结构中的集合关系就类似于数学中的集合。
线性结构:线性结构中的数据之间是**一对一**的关系。