![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 75
Amberda
(ˉ▽ ̄~)
展开
-
数据结构中二叉树实现及部分操作
谈二叉树之前,我们先来看看树的定义树:由N(N>=0)个结点构成的集合。 对N>1的树: 1、有一个特殊的结点,称为根结点,根节点没有前驱结点 2、除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继。 因此,树是递归定义的。 如下原创 2017-12-02 22:35:13 · 4917 阅读 · 0 评论 -
数据结构------哈希
哈希的提出之前我们已经接触过很多的数据结构了,比如线性表,二叉搜索树、AVL树、红黑树、B树等。当我们在这些数据结构中要查找一个元素时,会发现我们需要进行一系列的关键码比较,因为元素在存储结构中的位置与元素的关键码之间不存在直接的对应关系,所以搜索的效率就取决于搜索过程中比较的次数。那有没有什么查找方法是可以不经过任何比较,一次直接得到要搜索的元素呢?有一种存储结构,使元素的存储位置与...原创 2018-03-29 20:18:10 · 229 阅读 · 0 评论 -
C++实现红黑树
一、概念红黑树是一棵二叉搜索树,它和AVL树的区别就是,红黑树没有平衡因子,而是在每个结点上增加了一个存储位来表示结点的颜色,可以是red或者black,通过对任何一条从根节点到叶子结点简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似平衡,而且在实际应用中发现红黑树性能比AVL树性能要高。二、性质每个结点不是红色就是黑色 树的根节点是黑色的 如果一个节原创 2018-01-27 19:49:46 · 1423 阅读 · 0 评论 -
排序算法(四):归并排序
一、算法思想归并排序的实现分为递归实现与非递归实现。 递归实现的归并排序是算法设计中分治策略的典型应用,我们将一个大问题分割成小问题分别解决,然后用所有小问题的答案来解决整个大问题。 非递归实现的归并排序首先进行是两两归并,然后四四归并,然后是八八归并,一直下去直到归并了整个数组。二、具体算法描述把长度为n的输入序列分成两个长度为n/2的子序列对这两个子序列分别采用归并排序将两个排序好的子原创 2018-01-24 14:19:10 · 317 阅读 · 0 评论 -
排序算法(三):交换排序(冒泡排序、快速排序)
一、冒泡排序1.算法思想 冒泡排序是一种极其简单的排序算法。它重复地走访过要排序的元素,依次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。2.具体算法描述比较相邻的元素,如果前一个比后一个大,就把它们两个调换位置。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步原创 2018-01-24 13:53:26 · 467 阅读 · 0 评论 -
排序算法(二):选择排序(直接选择排序、堆排序)
一、直接选择排序1.算法思想:每一趟(第i趟,i=0,1,…,n-2)在后面n-i个待排序的数据元素集合中选出关键码最 小的数据元素,作为有序元素序列的第i个元素。待到第n-2趟做完,待排序元素集合中只剩下1 个元素,排序结束。2.具体算法描述在元素集合array[i]–array[n-1]中选择关键码最小的数据元素; 若它不是这组元素中的第一个元素,则将它与这组元素中的第一个元素交换在剩余的原创 2018-01-23 14:41:08 · 227 阅读 · 0 评论 -
C++实现AVL树(四种旋转详解)
一、概念AVL树又称为高度平衡的二叉搜索树,它能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度。二、性质树中每个左子树和右子树都是AVL树左子树和右子树高度之差的绝对值(简称平衡因子)不超过1(0,1,-1) 平衡因子就是用右子树的高度减去左子树的高度 红色的就是每个节点的平衡因子三、AVL树的插入如果在一棵原本是平衡的二叉搜索树中插入一个新节点,可能造成不平衡,此时原创 2018-01-23 13:02:51 · 1183 阅读 · 1 评论 -
排序算法(一):插入排序(直接插入排序、希尔排序)
一、直接插入排序1.算法思想当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移。2.具体算法描述列表内容从第一个元素开始,该元素可以认为已经被排序取出下一个元素,在已经排序的元原创 2018-01-22 10:47:18 · 438 阅读 · 0 评论 -
线索化二叉树的实现
之前我们介绍过二叉树和它的具体实现http://blog.csdn.net/qq_34021920/article/details/78698930,但是不难发现,普通的二叉树存在以下的缺陷:递归遍历有可能导致栈溢出;非递归遍历有可能降低程序的效率想要找到在某种遍历形式下某个结点的前驱或后继比较难树中有大量的空指针域造成浪费,比如:假如二叉树中有n个结点,则必定有n+1个空指针域线索化二叉原创 2017-12-05 19:22:44 · 299 阅读 · 0 评论 -
数据结构------并查集
先来看一道题: 假设一组有n个人和m对好友关系(存于数组r)。如果两个人是直接或者间接好友(好友的好友就是间接好友),则认为他们属于同一个朋友圈,请写出程序求出这个n个人里面一共有多少个朋友圈。 例如:n = 5,m = 3,r = {{1,2},{2,3},{4,5}} 表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友圈,4、5属于一个朋友圈.。则一共拥有...原创 2018-04-25 20:27:06 · 402 阅读 · 0 评论