数组
- 数组存储的数据在地址空间上是连续的。
- 方便数据的查找,查找数据的时间复杂度为O(1)。
链表
- 链表存储的数据在地址空间上可连续,可不连续。
- 链表中的每一个节点都包括数据和指向下一个地址的指针。
- 查找数据的时间复杂度为O(n),方便数据的增删。
如何快速找到链表的中间值:
- 先遍历一遍单链表确定长度L,然后再次从头结点出发循环L/2次
- 设置两个指针都指向单链表的头结点,第一个指针的移动速度是第二个的2倍,当第一个指向末尾结点时,第二个就指向了中间结点。这种方法要快一些。
栈
- 栈是一种先入后出的逻辑结构,每次加入新的元素和拿走元素都在顶部操作。
队列
- 队列是一种先入先出的逻辑结构,对元素的操作分别在对头和队尾,元素的插入在对尾,元素的删除在对头。
二叉树
- 每个节点至多只有两个子树的结构,在父节点中有指向左右子树的指针
-
- 先序遍历:根–左–右
- 中序遍历:左–根–右
- 后序遍历:左–右–根
- 查找二叉树:左子树的值小于根节点的值,右子树的值大于根节点的值,在插入数据时,从根节点开始往下比较,小于比较值则放在左边,大于比较值放在右边。插入一个值的时间复杂度是O(logn)
- 平衡二叉树:左右子树的高度差的绝对值不超过1