常见数据结构
💫

常见数据结构

Date
Property
快速了解常见的数据结构:定义、通俗理解、图示、应用、实现;
Created
Jun 13, 2022 03:07 AM
Tags
数据结构
计算机处理问题时,常常要把一个大问题自上而下分解为很多小问题,一个个拆解开,分别解决后,再回过头得到整个问题的答案。堆栈能够记录这中间一步步分解的复杂过程,而且由于最后合并的过程和一开始拆解的过程正好相反,因此它后进先出的特点可以很自然的将分解的问题合并回去——《计算之魂》

数组与链表

数组

  • 数组是有限个相同类型的变量组成的有序集合;物理上是要求连续的;
基本操作的时间复杂度:读取O(1)、更新O(1)、插入O(n)、删除O(n)、扩容O(n);

链表

  • 链表是一种物理上非连续、非顺序的数据结构。包含存放数据的data指向下一节点的指针;
基本操作的时间复杂度:读取O(n)、更新O(1)、插入O(1)、删除O(1);

堆栈与队列

  • 堆栈是一种线性逻辑数据结构,栈元素只能后进先出,最早放入的元素在栈底,最晚放入的元素在栈顶。就像圆桶装的薯片,最先放入的在最底层,我们只能从最上层吃到底层;
  • 队列是一种线性逻辑数据结构,队列只能后进后出,队列的出口处叫做队头,入口处叫做队尾。就像常见的排队,排在前面的先买票;
应用:
堆栈:回溯历史命令、实现简单计算器功能(边压入边处理)
队列:消息队列、树的广度优先算法实现、
🦒
二叉树遍历实现
注:我们在使用堆栈的时候,可以全部压入后使用,也可以边压入边处理,根据具体情况进行分析。

哈希表

  • 哈希表是一种逻辑数据结构,提供了键(key)和值(value)的映射关系
基本操作:写入O(1)、读取O(1)、扩容O(n)
优点:通过关键字实现一对一查找的速度非常快。常作为“空间换时间”的操作,应用非常广泛
缺点:存在冲突,解决冲突有开放寻址法(插入冲突位置后面)和链表法(链表next指向冲突值)

  • 树是n个节点的有限集,具有如下特点:有且只有一个根(root)节点;当n>1时,其余节点可分为m个互不相交的有限集,每个集合本身又是一棵树,称为根的子树

树的遍历

深度优先
前序:根节点、左子树、右子树 | 中序:左子树、根节点、右子树 | 后序:左子树、右子树、根节点
 
notion image
notion image
notion image
 
上述取自参考内容的示意图
 
广度优先
层序遍历:一层层遍历,可以利用队列实现
notion image
Python代码实现:
🦒
二叉树遍历实现

二叉树

二叉树:最多两个叶子节点
满二叉树:所有非叶子节点都有两个子节点
完全二叉树:层级顺序遍历,和满二叉树节点位置相同
notion image

二叉查找树

  • 如果左子树不为空,则左子树上所有节点的值均小于根节点的值。
  • 如果右子树不为空,则右子树上所有节点的值均大于根节点的值。
  • 左、右子树也都是二叉查找树。

二叉堆

二叉堆是一种特殊的完全二叉树,它分为两个类型:最大堆和最小堆。
  • 最大堆的任何一个父节点的值,都大于或等于它左、右孩子节点的值。
  • 最小堆的任何一个父节点的值,都小于或等于它左、右孩子节点的值。
notion image
二叉堆实现 & 应用:N个数中最小的k个数

参考内容