1. 数据结构
数据结构是指存在一种特定关系的数据元素的集合。 结构是值数据元素之间的关系。所以数据结构研究的问题是如何将有关系的数据存储在计算机中,并进行相关操作,这里的相关操作包含的一些基础算法,如初始化,插入,删除,访问元素等操作。数据结构包含逻辑结构、存储结构和在其之上的相关操作(即算法)。
1.1 逻辑结构
- 集合。数据元素属于同一个集合,无其他关系,数据元素之间是离散的。因为数据结构研究的重点是数据元素之间的额关系,所以集合关系不是数据结构的重点。
- 线性结构。数据元素是一对一的关系。除第一个和最后一个元素外,每个元素都有唯一的前驱和后继。如线性表(顺序表、单链表、双向链表和循环链表)、栈和队列、数组与广义表(数据元素可以是自定义结构)、
- 树形结构。数据元素是一对多的关系。除了根节点,每个节点有唯一的双亲节点(前驱)和一个或多个孩子节点(后继)。如二叉树
- 图形结构。数据元素是多对多的关系。任何两个数据元素之间都有可能有关系,每个节点可以有多个前驱和后继。
1.2 存储结构
存储结构可以分为四种 顺序存储、链式存储、散列存储和索引存储
顺序存储
顺序存储使用的是一段连续的内存,逻辑上相邻的元素存储连续的内存中。数组采用这种方式。
链式存储
链式存储是通过一个指针指向下一个元素,像自行车的链条一样组织起来。逻辑上相邻的元素在物理上不一定相邻。
散列存储
散列存储,以关键字为输入,计算出一个地址值或索引值来快速访问元素。计算出一个地址值或索引的过程是由散列函数实现的,它决定了关键字的存储位置,实现了关键字和存储位置的一一对应关系。
索引存储
索引存储除了存储节点信息外,还存储了节点的索引来表示节点的地址。如B+树中除了最后一层节点为节点信息,其他层的节点为索引节点。通过索引节点可以加快节点访问速度。
1.3 相关操作
初始化、查找、取值、插入、删除、遍历
2. 算法复杂度
算法是指对特定问题求解步骤的一种描述。
算法特性和好算法标准
算法具有以下特性:
- 有穷性:有穷个语句构成,不可能一直运行下去。
- 确定性:每个语句都有确定的含义,无歧义
- 可行性:通过有限次运算可以实现算法
- 输入和输出:零或多个输入,一个或多个输出
算法好的标准
- 正确性
- 易读性
- 健壮性
- 高效性:运行效率高, 一般以时间复杂度为度量标准
- 低存储性:需要的存储空间低, 一般以空间复杂度为度量标准
时间复杂度
常见的时间复杂度
- 常数阶: O(1)
- 多项式阶: O(n), O(n^2), O(n^3)
- 对数阶: O(logn), O(nlogn)
- 指数阶: O(2^n), O(n!), O(n^n)
这些时间复杂度的关系:
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)