ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构大略

2021-03-02 16:04:17  阅读:106  来源: 互联网

标签:结点 遍历 前序 访问 大略 二叉树 数据结构 节点


数组

先进后出

队列

先进先出

链表

单链表

双链表

迭代器

迭代器是一种对象,可以把抽象容器和通用算法有机统一起来,具有遍历复杂数据结构的能力。每种容器都将其迭代器以嵌套的方式定义于内部。

哈希表(散列表)

散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。

二叉树

二叉树(英语:Binary tree)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”或“右子树”。二叉树的分支具有左右次序,不能随意颠倒。
二叉树的第i层至多拥有2(i-1)个节点;深度为k的二叉树至多总共有2k-1个节点(定义根节点所在深度为1),而总计拥有节点数符合的,称为“满二叉树”。
在一颗二叉树中,若除最后一层外的其余层都是满的,并且最后一层要么是满的,要么在右边缺少连续若干节点,则此二叉树为完全二叉树(Complete Binary Tree)

顺序存储结构

二叉树可以用数组或链接串列来存储,若是满二叉树就能紧凑排列而不浪费空间。
如果某个节点的索引为i,(假设根节点的索引为0)则在它左子节点的索引会是2i+1,以及右子节点会是2i+2;而它的父节点(如果有)索引则为(i-1)/2。
这种方法更有利于紧凑存储和更好的访问的局部性,特别是在前序遍历中。然而,它需要连续的存储空间,这样在存储高度为h的n个节点所组成的一般树时,将浪费很多空间。

链式存储结构

由二叉树的定义得知二叉树的结点由一个数据元素和分别指向左右子树的两个分支构成 ,则表 示二叉树的链表中的结点至少包含三个域 :数据域和左右指针域。有时 ,为了便于找 到结点的双亲 ,则还可在结点结构
中增加一个指向其双亲受的指针域。

遍历二叉树

深度优先遍历
在深度优先级中,我们希望从根结点访问最远的结点。和图的深度优先搜索不同的是,不需记住访问过的每一个结点,因为树中不会有环。前序,中序和后序遍历都是深度优先遍历的特例。

  1. 前序遍历
    前序遍历运算:即先访问根结点,再前序遍历左子树,最后再前序遍历右子树。前序遍历运算访问二叉树各结点是以根、左、右的顺序进行访问的
  2. 中序遍历
    中序遍历运算:即先中前序遍历左子树,然后再访问根结点,最后再中序遍历右子树。中序遍历运算访问二叉树各结点是以左、根、右的顺序进行访问的
  3. 后序遍历
    后序遍历运算:即先后序遍历左子树,然后再后序遍历右子树,最后访问根结点。后序遍历运算访问二叉树各结点是以左、右、根的顺序进行访问的

广度优先遍历
和深度优先遍历不同,广度优先遍历会先访问离根节点最近的节点。二叉树的广度优先遍历又称按层次遍历。算法借助队列实现。

红黑树

红黑树是一种含有红黑结点并能自平衡的二叉查找树。它必须满足下面性质:

性质1:每个节点要么是黑色,要么是红色。
性质2:根节点是黑色。
性质3:每个叶子节点(NIL)是黑色。
性质4:每个红色结点的两个子结点一定都是黑色。
性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。
从性质5又可以推出:

性质5.1:如果一个结点存在黑子结点,那么该结点肯定有两个子结点

一种特别的完全二叉树。若是满足以下特性,即可称为堆:“给定堆中任意节点P和C,若P是C的母节点,那么P的值会小于等于(或大于等于)C的值”。
堆的实现通过构造二叉堆(binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。

  1. 任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。
  2. 堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。

将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

带权图

  1. 带权图中,边带有一个数字,叫做权,它可能代表距离、耗费、时间或其他意义。
  2. 带权图用来最常解决的问题是最短路径问题(pps)。
  3. 带权图的最小生成树中有所有的顶点和连接它们的必要的边,且这些边的权值最小。
  4. 优先级队列的算法可用于寻找带权图的最小生成树。
  5. 解决无向带权图的最小生成树的方法
    1… 新的顶点到其他顶点的所有边,这些顶点不能在树的集合中,把这些边放如优先级队列。
    2… 最小的边,把它和它所到达的顶点放入树的集合中。
    3… 复以上步骤,直到所有顶点都在树的集合中。
  6. 带权图的最短路径问题可以用 Dijkstra 算法解决。这个算法基于图的邻接矩阵表示法,它不仅能找到任意两点间的最短路径,还可以找到某个指定点到其他所有顶点的最短路径。

标签:结点,遍历,前序,访问,大略,二叉树,数据结构,节点
来源: https://blog.csdn.net/qq_34172041/article/details/114287209

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有