当前位置:   article > 正文

计算机基础——数据结构篇概览_怎么发现计算机中的数据结构呢

怎么发现计算机中的数据结构呢

数据结构:

1. 线性结构:数组、链表、栈、队列

(特点原理等了解清楚)

  1. 数组(基本数据结构)

    特点:支持随机访问,访问速度快,连续存储对CPU缓存机制友好,插入删除速度慢,不支持扩展

  2. 链表(基本数据结构)

    特点:不支持随机访问,访问速度慢,插入删除较快,支持长度扩展

    分类:单链表,循环链表,双向链表,双向循环链表。

  3. 特点:先进后出,只能在栈顶删除和插入元素

    分类:顺序栈(数组实现),链式栈(链表)

    应用:括号匹配、浏览器回退前进(两个栈实现)、反转字符串、维护函数调用(最后调用的先执行完)

  4. 队列

    特点:先进先出,在队尾(rear)入队,在队头(front)出队,维护两个指针

    分类【顺序队列(数组)、链式队列(链表)】:单队列,循环队列(解决假溢出问题)

2. 非线性结构:树、图、堆
    • 特点:树形结构的元素之间有着明显的层次关系
    • 扩展结构:二叉树、B树、B+树、红黑树
    • 存储:使用数组或链表
    • 树形结构应用较多,且每一种都有点复杂,后面单独补充这部分内容
    • 特点:关系复杂,无序

    • 分类:无向图和有向图、无权图和带权图

    • 存储方式:

      邻接矩阵:底层是一个二维数组,访问高效速度快,但浪费空间

      邻接表:底层是数组+链表,节省空间

    • 搜索方式:

      • 广度优先搜索:访问的顶点放入队列,先访问到的先出队。每次访问时取出队首结点,再访问该结点的所有后继结点,将未访问过的结点入队,继续访问下一个队首结点,重复上述过程,直到队列为空且没有需要入队的结点。

      • 深度优先搜索:访问的顶点放入栈中,先访问到的后出栈。每次访问时取出栈顶结点,再访问该节点所有后继结点,将未访问过的结点入栈,继续访问下一个栈顶结点,重复上述过程,直到栈为空且没有需要入栈的结点。

  1. 堆(一般用数组实现)

    • 特点:任意一个节点的值都大于等于或小于等于它所有子节点的值;堆是一棵完全二叉树
    • 分类:大顶堆、小顶堆
    • 堆操作:
      • 堆化:为了保持堆的性质,对结构进行调整。分为自底向上,和自顶向下。
      • 插入元素:将插入元素放到数组末尾,再自底向上堆化,将该元素放在该放的位置上
      • 删除堆顶元素:
        • ①使用自顶向下(也叫石沉大海):将末尾元素填充到堆顶的位置,不停和左右子节点比较,与较大的结点交换位置,重复此操作,直到无法交换位置。不会产生”气泡“。
        • ②使用自底向上:将堆顶元素的左右子节点进行比较,较大者元素填充到堆顶位置,重复此操作,直到移不了位置(堆底部)。此方法可能会产生”气泡“。
    • 堆排序:
      1. 建堆(数组时无序的,要堆化成小顶堆或大顶堆的性质)
      2. 排序
        1. 先取出堆顶元素;
        2. 将末尾元素放在堆顶,将取出的堆顶元素放在数组末尾;
        3. 采用自顶向下的堆化,继续取出堆顶元素放在末尾,直到所有非叶节点都堆化完成(所有非叶节点的索引是1~n/2)。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/675968
推荐阅读
相关标签
  

闽ICP备14008679号