![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 91
有效的放假者
这个作者很懒,什么都没留下…
展开
-
C++——哈希
1. unordered系列关联式容器1.1 unordered_map1.1.1 unordered_map的文档介绍1.1.2 unordered_map的接口说明1.2 unordered_set2. 底层结构2.2 哈希冲突2.3 哈希函数常见哈希函数2.4 哈希冲突解决2.4.2 开散列开散列增容开散列的思考3. 模拟实现3.1 哈希表的改造3.2 unordered_map3.3 unordered_set原创 2023-05-05 16:13:52 · 703 阅读 · 2 评论 -
C++——一种特殊的二叉搜索树之红黑树
1 红黑树的概念2 红黑树的性质3 红黑树节点的定义4 红黑树的插入操作情况一: cur为红,p为红,g为黑,u存在且为红。情况二: cur为红,p为红,g为黑(不存在连续的红结点),u不存在/u存在且为黑(仅仅单旋)情况三: cur为红,p为红,g为黑,u不存在/u存在且为黑(旋转方法与情况二不同——双旋)插入的三种情况代码演示及详解注释:5 如何验证一棵树是否是红黑树6 红黑树的删除7 红黑树与AVL树的比较8 红黑树的应用原创 2023-04-14 21:52:34 · 559 阅读 · 0 评论 -
C++——一种特殊的二叉搜索树之AVL树
序言1 AVL树的概念2 AVL树节点的定义3 AVL树的插入是否继续更新依据:子树的高度是否变化4 AVL树的旋转旋转的原则:1. 新节点插入较高左子树的左侧---左左:右单旋2. 新节点插入较高右子树的右侧---右右:左单旋3. 新节点插入较高左子树的右侧---左右:先左单旋再右单旋4. 新节点插入较高右子树的左侧---右左:先右单旋再左单旋5.如何验证一颗树是AVL树的验证?6 AVL树的删除(了解)7 AVL树的性能原创 2023-04-14 21:53:34 · 554 阅读 · 0 评论 -
C++——二叉树排序树
1 二叉搜索树概念2 二叉搜索树操作与模拟实现2.1 二叉搜索树的查找非递归版本递归版本2.2 二叉搜索树的插入非递归版本递归版本2.3 二叉搜索树的删除非递归版本递归版本3 二叉搜索树的应用(K模型、KV模型)4 二叉搜索树的性能分析原创 2023-02-18 21:22:10 · 1280 阅读 · 4 评论 -
C++——二叉树进阶oj题
二叉树创建字符串二叉树的分层遍历1二叉树的分层遍历2给定一个二叉树, 找到该树中两个指定节点的最近公共祖先二叉树搜索树转换成排序双向链表。根据一棵树的中序遍历与后序遍历构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树原创 2023-02-18 19:35:20 · 352 阅读 · 0 评论 -
C++——二叉树的前序遍历||中序遍历||后序遍历 非递归算法
二叉树的前序遍历,非递归迭代实现二叉树的中序遍历 ,非递归迭代实现二叉树的后序遍历 ,非递归迭代实现思路及其代码原创 2023-02-18 19:29:32 · 545 阅读 · 0 评论 -
(C语言)数据结构——排序算法总结与比较
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。有些排序算法无论如何都不能保证它是稳定的,那么它就是不稳定的但有些排序算法我们加以控制就可以保证他是稳定的,那么它就是稳定的第一次最坏移动一次元素,第二次最坏移动两次元素,以此类推,第n次最坏移动n次元素,所以计算公式为$(1+n)*n/2$近似等于O($n^原创 2022-09-22 17:13:02 · 706 阅读 · 2 评论 -
(C语言)数据结构——归并排序
我们先创建一个和a大小相同的数组,因为有数组a和个数n是不够的,所以创建一个_MergeSort()作为MergeSort()的一个子函数来控制开头(begin)和结尾(end),先取中间值坐标,若中间值坐标的左右两个数组都有序,那么取两个数组中小的尾插,最后再拷贝回原数组==归并哪部分就拷贝哪部分回去==。我们发现递归在这里非常神奇!归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用==分治法==的一个非常典型的应用。将==已有序==的子序列合并,得到完全有序的序列;即先使每个子序列有序原创 2022-09-15 21:03:34 · 613 阅读 · 0 评论 -
(C语言)数据结构——直接选择排序和堆排序
让堆顶先与下标为n-1的元素交换,交换完再进行向下调整;让堆顶再与下标为n-2的元素交换,交换完再进行向下调整;让堆顶再与下标为n-3的元素交换,交换完再进行向下调整,就这个过程循环往复,直到把下标为1的元素和下标为0的元素交换完成之后停止,堆排序就排好了。堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。基本思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。3. 空间复杂度:O(1)原创 2022-08-19 13:23:59 · 453 阅读 · 19 评论 -
(C语言)数据结构——冒泡排序和快速排序(超详解)
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。冒泡排序(Bubble Sort)是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。一趟冒泡排序就可以把一个最大或者最小的挑出来,走访数列的工作是重复地进行直到没有原创 2022-08-19 13:22:35 · 2709 阅读 · 14 评论 -
数据结构——直接插入排序和希尔排序(超详解)
希尔排序法的基本思想是:先选定一个整数(如下图gap为3)我们就设这个整数为gap,把待排序文件中所有记录分成gap个组,所有==距离为gap==的元素分在同一组内,并==对每一组内的元素进行排序==。然后再取下一组重复排序的工作。然后缩小gap,当gap到达为1时,所有记录在统一组内的数据就排好序了。希尔排序是对直接插入排序的优化。2.当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。3.希尔排序的时间复原创 2022-08-17 17:32:41 · 1762 阅读 · 7 评论 -
(C语言)数据结构之二叉树
节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6**> **2、叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I...等节点为叶节点** 3、非终端节> **5、孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是$2^k-1$ ,则它就是满二叉树。2. 完全二叉树:完全二叉树是效率很高的数据结构原创 2022-08-16 17:04:17 · 552 阅读 · 2 评论 -
(C语言)二叉树经典oj题练习
我们先自己定义一个二叉树结构体类型,然后基于分治的思想,递归构建二叉树,构建二叉树先malloc出根节点然后再构建左子树,右子树即可。因为字符串需要构建之后指针向后移动找到下一个字符,所以需要定义一个i下标,通过传址调用把i的地址传过去,实现对下标i的控制。构建之后i下标向后移动,指针指向’#‘代表到了空节点了完成返回NULL即可。如果一个树的左子树与右子树镜像对称,那么这个树是对称的。> 因此,如果同时满足下面的条件,两个树互为镜像: > 1、它们的两个根结点具有相同的值 > 2、每个树的右子树都与原创 2022-08-16 16:57:59 · 688 阅读 · 0 评论 -
(C语言)数据结构二叉树之堆
前言:二叉树的顺序结构一、堆的概念及结构堆的性质:二、堆的实现1、堆向下调整算法2、堆向上调整算法3、堆的创建怎么求倒数第一个非叶子结点?4、建堆的时间复杂度5、堆的插入6、堆的删除7、堆的代码实现三、堆的应用1、堆排序2、TOP-K问题原创 2022-08-12 19:24:19 · 796 阅读 · 6 评论 -
(C语言)数据结构之栈和队列
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 一般用push表示。出栈:栈的删除操作叫做出栈。出数据也在栈顶。 一般用pop表示。...原创 2022-08-11 12:42:44 · 220 阅读 · 0 评论 -
(C语言)数据结构之栈和队列面试题
下一次想出栈的时候就再倒一次,也就是把q2的前n-1个元素出队并入队到q1,然后q2把剩下的那个元素出队即可,此时q2为空下一次再入栈的时候,也就不用管q1还是q2,就直接谁有元素就往谁的里面入队元素即可。每次入队的时候先要判断当先队列是否是满的,不为满,让back当前位置赋值要入队的元素,然后back正常++往后走,关键的来了再进行back=back %(k+1)操作即可实现循环。为了满足栈的特性,即最后入栈的元素最先出栈,在使用队列实现栈时,应满足队列前端的元素是最后入栈的元素。...原创 2022-08-11 12:38:48 · 847 阅读 · 0 评论 -
(C语言)顺序表和链表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。顺序表、链表、栈、队列、字符串。线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。静态顺序表:使用定长数组存储元素。动态顺序表:使用动态开辟的数组存储。......原创 2022-08-09 11:54:22 · 655 阅读 · 0 评论 -
(C语言)干货满满!!!面试必备OJ题:链表篇(二)
通过计算A链表和B链表的差值的绝对值,让长的那个链表先走差值的绝对值步,最后两个链表再同时往前遍历,判断longlist和shortlist是否的地址相同,一旦相同就说明当前地址是两个单链表相交的起始节点,返回此时的地址即可。解法一:普通解法,如果有环的情况下,定义一个快慢指针,从头开始往后先找在环中相遇的结点,然后将此处的结点的next置为NULL,相当于断开当前的环,那么就是前面的相交链表问题了。1、先找到整段链表的中间结点,奇数个就是最中间的那个结点,偶数个的话就是中间两个的第二个。.........原创 2022-08-09 11:50:00 · 353 阅读 · 1 评论 -
(C语言)干货满满!!!面试必备OJ题:链表篇(一)
这篇博客总结了几个比较常见的有关单链表的面试题,个人觉得题目比较好也比较经典,特地拿出来与小伙伴们分享。原创 2022-08-07 23:19:31 · 1102 阅读 · 0 评论