数据结构是计算机中存储和组织数据的方式
主要包含4方面的内容:
- 数据元素(Data)
- 逻辑结构:数据元素之间的逻辑关系
- 存储结构:逻辑结构在计算机中的存储结构
- 所规定的操作:除常见的增删改查外,还有遍历和排序等。
1.1 数据元素
- 数据(Data):所有能够被计算机识别的符号集合。它是一个抽象的概念,可以是程序语言中定义的类型,也可以是自定义的结构体类型
- 数据元素(Data Element): 数据集合中的一个个体,通常包含多个或一个数据项。如一个Person对象,可能name, address, mobile等数据项
- 数据项(Data Item): 是数据结构中讨论的最小单位,存在于某具数据元素的集合中。
- 数据对象:具有相同性质的元素集合,如一个由字符串组成的数组,一个由Person对象组成的数组。
1.2 逻辑结构
对于关系型数据,通常有一对一、一对多以及多对多的关系。对于无序的数据,通常用集合来表示。
基于此,逻辑结构有:
- 线性结构:通常用来表示一对一的关系,表现形式有:数组、列表、栈、队列及链表等。
- 树形结构:用于表示一对多的关系,表现形式就是对应的树。
- 图形结构:用于表示多对多的关系,由边和点组成
- 集合结构:用于表示无序的数据,表现形式有:字典和散列。
1.3 存储结构
存储结构有两种形式:
- 顺序存储:数据存储在一片连续空间中,存取速度快,但是插入和删除慢
- 链式存储:数据存储在不连续的空间中,通过辅助结构来寻找。插入和删除效率高,但是存取速度慢。
存储结构与逻辑结构并没有特殊的限制,一个线性结构,即可以顺序存储,也可以链式存储。
1.4 操作
每个数据定义好后,都会有相应的基本操作。对于程序语言来说,各数据类型都有提供相应的基础API操作
通常包含:CRUD、遍历以及排序等。
2. 算法
算法是用来设计一种使用计算机来解决问题的方法
具有以下特性:
- 输入:可以有一定的输入参数
- 输出:产生至少一个输出结果
- 确定性:执行过程必须清晰,无歧义
- 有限性:执行的次数、时间和空间必须是有限制。这样才可以评估和对比效率。
如果说编程是一种思想,那算法就是这思想里的灵魂。
在我们软件开发过程中,数据结构和算法其实一直存在。当你分析一个难点问题时,你会用到。当你在用像Vue和React之类的库时,也会用到。不同的是,他们定义好了相应的数据结构,你只要去用就行。但是对于高级工程师,只是用,显然是不够的。
对于业务难点的分析解决,通常我们会经历以下几个步骤:
- 根据对业务和问题的理解,了解有哪些数据及最终要达到的效果是什么。即输出什么
- 根据业务逻辑,分析实现的方式,这步可能会画流程图,然后确认程序的执行步骤,这步其实就是算法设计
- 针对上面的设计,我们需要一个合适的数据结构来实现相应的策略。
- 通常一个问题会有多个解,我们需要分析出最优解时,就需要算法分析,然后再回到上面两个步骤。
- 最后才是程序实现。
综上:
- 数据结构在解决计算机问题中起到了:存放要处理的数据及实现算法策略的作用
- 算法设计及分析:帮助你更好地解决问题