
数据结构与算法
文章平均质量分 91
努力学习的少年
一分耕耘,一份收获
展开
-
【数据结构】——并查集 的 详细解析和实现
1. 并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。 查找(Find):查询两个元素是否在同一个集合中 合并(Union):把两个不相交的集合合并为一个集合原创 2022-09-10 20:05:41 · 3041 阅读 · 0 评论 -
【高阶数据结构(贰)】——红黑树的基本概念和插入的实现
红黑树的基本概念 红黑是一颗特殊的搜索树,它除了遵循搜索树的规则外,还需要遵循以下规则: 每棵树只红色节点和黑色节点 根节点为黑色。 每条路径的黑色节点个数都是相同的。 红色节点的孩子只能是黑色节点。 红黑色的性质 1.红黑树的最长路径不会大于最短路径的两倍。 2.红黑树是一颗相对平衡的搜索树,它的查找和插入的效率都为O(logn)。 为什么红黑树的最长路径不会不会超过最短路径的两倍? 假设一颗红黑树中每条路径的黑色节点为3,那么最短路径只有3个黑色节点,最长路径是3个红色节点原创 2022-05-15 23:53:45 · 650 阅读 · 0 评论 -
【高阶数据结构(壹)】——一步一步教你手撕AVL树(增删查改)画图详解,内含代码实现包含注释)
???? 1.AVL树的概念 AVL树一颗二叉搜索树 左右子树高度之差(简称平衡因子)的绝对值不超过1。 如果一颗AVL树有n个节点,其高度可以保持在O(logn),搜索的时间复杂度是O(logn). ???? 2.AVL树节点的定义 template<class K,class V> struct AVLTreeNode { AVLTreeNode* _left;//左孩子节点 AVLTreeNode* _right;//右孩子节点 AVLTreeNode* parent;//原创 2022-01-17 21:43:51 · 1010 阅读 · 15 评论 -
【数据结构】——二叉搜索树
目录 前言 二叉搜索树的概念 二叉搜索树的操作 树的节点实现 搜索树的基本结构 插入数据 查找 删除 拷贝构造函数 二叉搜索树的应用 前言 在c++中的容器里map和set的学习需要二叉搜索树的铺垫,也为后边的的红黑树和AVL树做铺垫,也就是说,今天主要讲搜索树的基本结构和应用。 二叉搜索树的概念 所有的根节点大于左子树的节点,小于右子树的节点的二叉树就叫做二叉搜索树。 二叉搜索的性质: 如果左子树不为空,则左子树上的所有节点都小于根节点。 如果右子树不为...原创 2021-10-31 23:22:11 · 6644 阅读 · 4 评论 -
【算法】——归并排序的解析
1.归并排序的思想 归并是将两个或两个以上的有序表组合成一个新的有序表,假设初始序列含有n个记录,则可看成是n个子序列,每个子序列的长度为1,然后两两归并,得到[ n/2 ]个长度为2或为1的有序的子序列;在两两归并... ... ,如此重复,直到得到一个长度为n的有序序列为止。如下: 2.归并排序的分析 我们先来对两个序列合成新的有序序列进行分析;我们以上面的第三趟排序作为例子 这就完成了两个序列合并的算法,代码如下。 void _MergeSortNonR(int* a...原创 2021-10-10 10:21:19 · 2918 阅读 · 14 评论 -
【算法】——冒泡排序与快速排序的分析
冒泡排序 冒泡排序的基本思想时: 冒泡排序的步骤很简单,只需要将较大的值往后挪,直到将最大的值移动到最后面的时候,就完成一趟排序,重复以上步骤,将第二大的值,第三大的值......移动到最后面,直到排序完成. 如下图所示: 代码: void swap(int* left, int* right) { int tmp = *left; *left = *right; *right = tmp; } void BubbleSort(int arr[], int n) { for.原创 2021-09-30 08:27:42 · 1031 阅读 · 15 评论 -
【算法】 ——插入排序(直接插入排序,希尔排序)的基本思想和解析
1.插入排序 插入排序的基本思想: 插入排序是一种最简单的的排序思想,它的思想是将一个数据插入到一个有序的数据列表,得到一个新的有序列表。 插入排序类型于将我们完的扑克,将牌一张一张插入到我们的序列中,形成一个有序的序列。 整形数组 9 1 2 5 7 4插入排序的过程。蓝色箭头指向的值为tmp值。紫色箭头是tmp插入的位置。 插入排序 对应的代码: void Insert(int arr[], int n) { for (int i =...原创 2021-09-27 11:38:13 · 2521 阅读 · 8 评论