之前关于数据和数据结构以及数据算法的理解很模糊,或者说不准确,今天好好的理解了一遍。 自己举了一个例子希望觉得还可以,分享出来希望帮到一点大家。
例子:烧开一壶水。
正常我们烧开一壶水,步骤通常是
先把水导入水壶,把水壶放在火上,等到水开,把火关掉。(什么电烧水,劈材烧水就不要想了,不再讨论范围内)
上面4个步骤可以理解为“算法”。 这里也可以体会下算法的几个特性:
- 输入
- 输出
- 有穷性
- 确定性
- 可行性
解释: 输入的水,输出的开水,5个步骤为有穷性,每个步骤做什么一目了然,不重复不含糊为确定性,可行性就是这几个步骤确实可行,步骤2不是说要你把水壶放在长征一号的发射台加热。
说完了算法来说下数据
数据是计算机的核心。 你可以把上面的水理解为数据,你要有水了才会去执行上面5个步骤,没水你玩什么。
说完了数据。来说下数据结构
说到数据结构,需要先说下数据结构分为数据的逻辑结构和数据的实际存储结构。
正如上面的例子,水(数据),水的分子式都是H2O, 我们可以理解为,H2O是水的实际结构,一个氧原子附近两个氢原子,而通常看见的自来水和矿泉水是一种外在的表现形式。相对应数据来说,数据实际存储在硬盘光盘等介质中的样子就是数据的存储结构,而对外表现的时候,程序员编程用的时候,就会变成通常的形式,比如编程时候的数组[]是一种数据的逻辑结构,而在内存中是数据是用一个顺序存储的二叉树来存储等。
以上说完不知道大家对于数据,数据结构,和算法有没有一点理解了。 算法就是解决问题的步骤,数据就是解决问题的已知条件,数据结构就是把这些条件整理,以便于算法能够高效的解决问题。
数据结构分为逻辑结构和实际存储结构,逻辑结构我理解就是编程的一般所见。 实际的结构分为,线性表,栈,队列,串,数组和树以及图。
线性结构和非线性结构
这些数据结构按照元素之间的关系。可以分为线性结构和非线性结构。 线性结构就是元素之间一个一个排列,具有单一的前驱和后驱。 1-2-3-4 这种,线性表,栈,队列,串 和数组分为线性结构,一对一的关系。 树和图分为非线性结构,非线性结构就是元素之前相互联系,类似多对多的关系,一对多的关系。
顺序存储和链式存储
顺序存储和链式存储是指元素之间在内存中存储的实现方式。 比如线性结构,元素之间都是一个一个排列的,但是实现一个一个排列,也是有不同方式的,比如1234567这种形式(顺序存储),7个元素之间一个一个紧密排列,1不需要指定下一个元素是那个,因为一定是2。 也可以是1>2>3>4>5>6>7.这种方式(链式存储),由前一个元素1指定下一个元素2。指定的方式其实所说就是大家肯定在其他地方听过或者见过的指针,头指针,尾指针。