简介

数据结构即数据的存储结构,不同的存储结构存在不同的优劣,数据结构与算法一般而言是密不可分的,因为实现相应的存储结构之后难免会提供相应的算法,几乎每一种存储结构都会提供一些基本的操作,即“增删改查”。

根据是否修改数据结构,所有操作大致分为两类方式:

  • 静态:仅读取,数据结构的内容及组成一般不变:查找
  • 动态:需写入,数据结构的局部或整体将改变:增加、删除

数据结构通常可分为:

  • 线性数据结构:线性表、栈、队列
  • 非线性数据结构:树、图

特别的,线性表又具体分为顺序表和链表,而树也可以理解为半线性数据结构。

也可以按照数据访问方式分为:

  • 寻秩访问(call by rank):顺序表
  • 寻位置访问(call by position):链表
  • 寻关键码访问(call by key):二叉搜索树
  • 寻优先级访问(call by priority):优先级队列
  • 寻数值访问(call by value):哈希

常见数据结构的相关操作的时间复杂度:

数据结构顺序表链表二叉树二叉搜索树哈希表
增加\(O(n)\)\(O(1)\)\(O(logn)\)\(O(logn)\)\(O(n)\)\(O(n)\)
删除\(O(n)\)\(O(1)\)\(O(logn)\)\(O(logn)\)\(O(n)\)\(O(n)\)
修改\(O(1)\)\(O(n)\)\(O(logn)\)\(O(logn)\)\(O(n)\)\(\approx O(1)\)