链表
链表是一种由节点(node)组成的线性数据集合,每个节点通过指针指向下一个节点。它是一种由节点组成,并能用于表示序列的数据结构
单链表:每个节点仅指向下一个节点,最后一个节点指向空(null)。
双链表:每个节点有两个指针p,n。p指向前一个节点,n指向下一个节点;最后一个节点指向空(null)
循环链表:每个节点指向下一个节点,最后一个节点指向第一个节点
时间复杂度:
- 索引:O(n)
- 查找:O(n)
- 插入:O(1)
- 删除:O(1)
栈
栈是一个元素集合,支持两个基本操作:push用于将元素压入栈,pop用于删除栈顶元素
后进先出的数据结构(Last In First Out,LIFO)
时间复杂度
- 索引:O(n)
- 查找:O(n)
- 插入:O(1)
- 删除:O(1)
树
树是无向,联通的无环图。
二叉树
- 二叉树是一个树形数据结构,每个节点最多可以有两个子节点,称为左节点和右节点。
- 满二叉树(Full Tree): 二叉树中每个节点有0或者2个子节点。
- 完美二叉树(Perfect Binary):二叉树中的每个节点有两个子节点,并且所有的叶子节点的深度是一样的。
- 完全二叉树:二叉树中除最后一层外其他各层的节点数均达到最大值,最后一层的节点都连续集中在最左边
二叉查找树
二叉查找树(BST)是一种二叉树。其任何节点的值都大于等于左子树中的值,小于等于右子树中的值。
时间复杂度
- 索引:O(log(n))
- 查找:O(log(n))
- 插入:O(log(n))
- 删除:O(log(n))