0 - 数据结构

介绍

原文链接

我的博客

数据

数据是用来呈现信息的数字、符号、字母的组合。

数据结构

数据结构是一组数据元素,提供最简单的方式来存储数据、对数据执行不同的操作。数据结构是计算机上一种特殊的数据组织形式,可以对数据进行高效使用。数据结构的思想是降低任务的时间复杂度与空间复杂度。

一个良好的数据结构选择,可以进行实现高效地操作。一个高效的数据结构使用最小的内存空间,并使用最短的时间处理数据。

数据结构也会定义一类抽线数据类型 ADT: Abstract data type,由三元参数组成:

  • D:范围集
  • F:操作集
  • A:公理集

数据结构类型:

  1. 线性数据结构
  2. 非线性数据结构

线性数据结构:

  • 元素以一维形式组织
  • 例子:链表、栈、队列,等

非线性数据结构:

  • 元素以多维形式组织
  • 例子:树、图、表,等

数据结构在不同领域使用:

  • 操作系统
  • 图形学
  • 计算机设计
  • 区块链
  • 遗传学
  • 图像处理
  • 仿真学

下面是一些流行数据结构的一个简短介绍:

  1. 数组

    数组是存储在连续内存空间的数据项目集合。它用来将多个相同类型的数据存储在一起。只需要在基地址加上偏置可以计算得到元素的位置。

  2. 链表

    链表是一个线性数据结构,链表数据不存储在连续的存储空间中,元素通过指针连接。

  3. 栈式一个线性数据结构,遵循后进先出规则,在栈中,入栈与出栈只发生在栈顶。

    • Initialize:创建一个空栈
    • Push:入栈元素,若栈满,产生栈溢出条件
    • Pop:出栈元素,若栈空,则产生栈下溢条件
    • Peek/Top:查询栈顶元素
    • isEmpty:查看栈是否为空,空返回 true
    • isFull:查询栈是否以满,满返回 true
  4. 队列

    队列遵循先进先出,在队列中,入队从一端进行,而出队从另一端进行。

    • Enqueue:入队,若队满,产生队列溢出条件
    • Dequeue:出队,若队空,产生队列下溢条件
    • Front:队列的头
    • Rear:队列的尾
  5. 二叉树

    与数组、链表、栈或队列不同,树式具有层级的数据结构。二叉树是树状数据结构,每一个节点最多具有两个子节点,分别称为左子节点与右子节点。它通常是使用链表实现。

    二叉树使用树的根节点做引用。如果树为空,那么根节点为 NULL,一棵二叉树节点包含下面组件:

    1. 数据
    2. 指向左子节点的指针
    3. 指向右子节点的指针
  6. 二叉搜索树

    二叉搜索树是具有下面特性的二叉树:

    • 左子树的节点值均小于这个节点
    • 右子树的节点值均大于这个节点
    • 左子树与右子树也构成二叉搜索树
  7. 堆是特殊的树数据结构,但是堆是一个完全二叉树,一般情况下,堆可以是下面两种类型:

    • Max-Heap:在最大堆中,根节点的值总是比它的子节点大,且在子树中递归成立
    • Min-Heap:在最小堆中,根节点的值总是比它的字节点小,且在子树中递归成立
  8. 散列

    散列设计来使用称为哈希函数的一类特殊函数,使用给定的键值来实现快速元素访问,是否能够高效实现,取决于使用的哈希函数。

    比如,一个哈希函数映射 x 在数组中的索引值,它使用 x%10 函数实现,那么列表 [11, 12, 13, 14, 15] 的数组,分别存储在数组的 {1, 2, 3, 4, 5} 偏置位置。

  9. 矩阵

    一个矩阵具有行和列。

  10. 字典树

    字典树是一个高效的信息恢复数据结构。使用字典树,搜索复杂度可以降低到最优。如果我们将值存储在二叉搜索树中,一个平衡二叉树需要时间为 M*logNM 为最大字符串长度,N 为树种的值个数。而使用字典树,我们可以在 O(M) 时间内搜索到,当然它的代价是存储时的复杂要求。

posted @ 2022-06-17 22:02  ArvinDu  阅读(52)  评论(0编辑  收藏  举报