数据结构
让代码更简洁和高效
1.逻辑结构
概念:描述数据之间的逻辑规律和数据之间的联系
(元素与元素之间的关系)
逻辑结构的分类:
- 线性结构–>一对一的关系–>线性表
头节点无前驱,尾节点无后继 - 层次结构—>一对多的关系–>树
根节点无前驱,叶子节点无后继 - 网状结构—>多对多的关系–>图
2.存储结构
概念:数据的逻辑结构在计算机中的具体实现。
存储结构分类:
- 顺序存储:内存空间开辟是连续
数组:内存空间连续开辟,数据元素类型相同 - 链式存储:通过地址将数据元素联系在一起
- 索引存储:通过索引表找到数据元素存放位置,拿到数据
存在两个表格: 索引表 和 数据表 - 散列存储结构 (哈希存储)
数据元素的存放和位置之间存在一个关系。
存在一个关系函数和关键值(key)
将key代码关系函数可以计算出数据存放的位置。
存安照对应位置存,取按照对应位置取。
算法
-
算法和程序
算法:解决问题的思想办法
程序:用计算机语言对算法的具体实现 -
算法+数据结构=程序
算法的设计:依赖于逻辑结构
算法的实现:依赖于存储结构 -
算法的特性
1)有穷性:执行步骤是有限的
2)确定性:每个步骤,无二义性,没有歧义
3)可行性:能够在有限时间内完成
4)输入和输出:一个算法可以有一个或多个输入和输出 -
如何评价一个算法的好坏
正确性:保证算法是可以正确完成功能的实现
易读性:容易被解读
健壮性:容错(错误)处理
高效性:执行效率,算法执行快慢容易受到计算机性能的影响,不可以作为评判算法高效性的 标准,这通过可执行语句重复执行次数来衡量算法是否高效 。(时间复杂度)
低存储性: 占用空间小 (空间复杂度)
计算大O的方法
(1)根据问题规模n写出表达式 f(n)
(2)如果有常数项,将其置为1
//当f(n)的表达式中只有常数项的时候,有意义 f(n) = 8
//T(n)=O(1)
(3)只保留最高项,其它项舍去
(4)如果最高项系数不为1,除以最高项系数