关于数据结构的那些事

134 阅读3分钟

1. 数据结构

数据结构是指存在一种特定关系的数据元素的集合。 结构是值数据元素之间的关系。所以数据结构研究的问题是如何将有关系的数据存储在计算机中,并进行相关操作,这里的相关操作包含的一些基础算法,如初始化,插入,删除,访问元素等操作。数据结构包含逻辑结构、存储结构和在其之上的相关操作(即算法)。

1.1 逻辑结构

  1. 集合。数据元素属于同一个集合,无其他关系,数据元素之间是离散的。因为数据结构研究的重点是数据元素之间的额关系,所以集合关系不是数据结构的重点。
  2. 线性结构。数据元素是一对一的关系。除第一个和最后一个元素外,每个元素都有唯一的前驱和后继。如线性表(顺序表、单链表、双向链表和循环链表)、栈和队列、数组与广义表(数据元素可以是自定义结构)、
  3. 树形结构。数据元素是一对多的关系。除了根节点,每个节点有唯一的双亲节点(前驱)和一个或多个孩子节点(后继)。如二叉树
  4. 图形结构。数据元素是多对多的关系。任何两个数据元素之间都有可能有关系,每个节点可以有多个前驱和后继。

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)