![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++数据结构学习
ChenEthan_
这个作者很懒,什么都没留下…
展开
-
使用邻接表的方式实现图
1 基本概念1.顶点:图中的数据元素2.边:顶点之间的连接3.权重:边可以带权重,用来表示从一个顶点到另一个节点的成本。4.路径:路径是由边连接的顶点组成的序列5.环:环是有向图中国的一条起点和终点为同一个节点的路径。6.图的分类:按边有无方向分为有向图,无向图;按边有无权重分为权重图,无权重等等。其分类方式很多,就不一一列出。7.度:无向图中顶点的边数,有向图中还分为入度和出度。8.连图图:若图中任意两个顶点都是连通的,称为连通图,在有向图中,称为强连通图。2 图的存储结构图的存储结原创 2021-09-17 22:47:25 · 1518 阅读 · 0 评论 -
二叉搜索树
1 为什么要使用二叉搜索树?我们知道搜索算法有顺序搜索,二分搜索,还有散列表(也叫哈希表),而二叉搜索树是另一种搜索算法,利用二叉树的结构可以提高搜索效率。2 二叉搜索树的性质二叉搜索性:小于父节点的键都在左子树中,大于父节点的键则都在右子树中。左子树的所有键都小于根节点的键,右子树的所有键则都大于根节点的键。3 代码实现Python版本:有两个类分别是BinarySearchTree和TreeNode。首先看看TreeNode,其提供了很多辅助函数,大大简化了BinarySearchTree原创 2021-09-16 20:31:23 · 93 阅读 · 0 评论 -
利用二叉堆实现优先级队列
1 什么是优先级队列1.1 定义优先级队列是队列的一个重要变体,优先级最高的元素在最前,优先级最低的元素在最后。1.2 实现方式列表或数组的插入时间复杂度是O(n),排序的时间复杂度是O(nlogn),二叉堆的时间复杂度是O(logn)。因此优先级队列用二叉堆来实现。1.3 应用在图算法中,优先级队列是一个非常有用的数据结构。2 二叉堆2.1 堆堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小)。大根堆,父节点比子节点大;小根堆,父节点比子节点小。2.2原创 2021-09-15 15:35:05 · 634 阅读 · 0 评论 -
树中的重要概念
1 基本术语及定义1.1 根节点根节点:是树中唯一没有入边的节点。1.2 父节点父节点:一个节点是其所有子节点的父节点1.3 子节点子节点:一个节点通过出边与子节点相连1.4 兄弟节点兄弟节点:具有同一个父节点的节点称为兄弟节点1.5 叶子节点叶子节点:叶子节点没有子节点1.6 层数节点n的层数是从根节点到n的唯一路径长度1.8 高度高度:树的高度是其中节点层数的最大值。1.9 树树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有原创 2021-09-14 21:27:47 · 2243 阅读 · 0 评论 -
C++实现树的遍历
树的遍历1 遍历方式1.1 前序遍历前序遍历定义:在前序遍历中,先访问根节点,然后递归地前序遍历左子树,最后递归地的前序遍历右子树。1.2 中序遍历中序遍历定义:在中序遍历中,先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。1.3 后序遍历后序遍历定义:在后序遍历中,先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。1.4 层序遍历层序遍历定义:按层从左至右2 案例3 代码实现#include<iostream>#includ原创 2021-09-13 23:23:06 · 2336 阅读 · 1 评论 -
二叉树的应用之解析树
解析树解析树的定义简单的说,解析树常常用于真实世界的结构表示,例如句子或数学表达式。具体可参考链接解析树如何C++创建一个完全表达式的解析树呢?例如"( 3 + ( 4 * 5 ) )",该表达式中的每个字符之间用空格隔开。具体代码如下:#include<iostream>#include<string>#include<vector>#include<stack>using namespace std;//二叉树的构建class Bi原创 2021-09-13 20:22:19 · 247 阅读 · 0 评论 -
C++实现二叉树的创建
简单二叉树的创建#include<iostream>using namespace std;//简单二叉树的创建## class BinaryTree {public: //初始化 BinaryTree(int val) { this->val = val; this->leftChild = nullptr; this->rightChild = nullptr; } //插入左子节点 void insertLeft(int newNode)原创 2021-09-09 23:17:28 · 1095 阅读 · 0 评论