
数据结构(C++)
文章平均质量分 92
托马斯.杨
这个作者很懒,什么都没留下…
展开
-
红黑树
1.概念:红黑树是一种近似平衡的二叉搜索树,在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。2.性质:1.每个节点不是红色就是黑色;2.根节点是黑色;3.叶子节点(NULL节点)是黑色的;4.红色节点的两个孩子必须是黑色的;5.对于每个节点,从该节点出发到叶子节点所有路径上的黑色节点数相等。因为要满足红黑树的这五条性质,如果我们插入的是黑色节点就一定会原创 2020-10-08 18:18:11 · 323 阅读 · 0 评论 -
最小生成树以及Kruskal算法,Prime算法
一、最小生成树连通图:在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中任 意一对顶点都是连通的,则称此图为连通图。强连通图:在有向图中,若在每一对顶点vi和vj之间都存在一条从vi到vj的路径,也存在一条从vj 到 vi的路径,则称此图是强连通图。生成树:一个连通图的最小连通子图称作该图的生成树。有n个顶点的连通图的生成树有n个顶点 和n- 1条边连通图中的每一棵生成树,都是原图的一个极大无环子图,即从其中删去任何一条边,生成树就不在连通;反之,在其中引入任何一条新原创 2020-08-10 21:01:48 · 629 阅读 · 1 评论 -
图的存储和遍历
一、图的存储因为图中既有节点,又有边(节点与节点之间的关系),因此,在图的存储中,只需要保存:节点和边关系即可。节点保存比较简单,只需要一段连续空间即可。1、 邻接矩阵因为节点与节点之间的关系就是连通与否,即为0或者1,因此邻接矩阵(二维数组)即是:先用一个数组将定点保存,然后采用矩阵来表示节点与节点之间的关系。注意:无向图的邻接矩阵是对称的,第i行(列)元素之和,就是顶点i的度。有向图的邻接矩阵则不一 定是对称的,第i行(列)元素之后就是顶点i 的出(入)度。如果边带有权值,并且两个原创 2020-08-10 18:15:09 · 943 阅读 · 0 评论 -
并查集介绍及应用
一、并查集原理并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题只能用并查集来描述。并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。举个栗子:某公司今年校招全国总共招生10人,西安招4人,成都招3人,武汉招3人,10个人来自不同的学校,起先互不相识,每个学生都是一个独立的小团体,现给这些学生进行编号:{0,1,2,3原创 2020-07-24 16:48:18 · 1261 阅读 · 0 评论 -
B树实现,B*,B+树介绍,B树应用
一、B树概念1970年,R.Bayer和E.mccreight提出了一种适合外查找的树,它是一种平衡的多叉树,称为B树(有些地方写的是B-树,注意不要误读成"B减树")。一棵M阶(M>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质:根节点至少有两个孩子每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字,并且以升序排列key[i]和key[i+1]之间的孩子节点的值介于key[i]、key[i+1原创 2020-07-13 19:09:48 · 759 阅读 · 0 评论 -
AVL树及其实现(C++)
一、AVL树简单介绍在前面二叉搜索树中,我们可以看出它的查找销率非常高,最优可到达O(Log2(N)),但是当数据越接近有序的时候二叉搜索树将退化成一个链表,查找效率就能变成了O(N),因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis(AVL的由来)发明了AVL树:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中...原创 2019-12-16 14:58:01 · 831 阅读 · 0 评论 -
二叉搜索树及其实现(C++)
1、二叉搜索树(二叉排序树)的性质:1、任意一个节点的值都大于左子树中所有节点的值。2、任意一个节点的值都小于右子树中所有节点的值。3、中序遍历按从小到大排列。4、可以是一颗空树5、不能有重复的值。2、查找:从根节点出发:1、若要找的值大于当前节点的值,在其右子树里继续找。2、若要找的值小于当前节点的值,在其左子树里继续找。3、若要找的值等于当前节点的值,返回true。...原创 2019-12-10 14:14:01 · 557 阅读 · 0 评论 -
C++中的string类
一、产生C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可 能还会越界访问。所以在C++中就在std域里封装了string类,使得字符串的处理比C语言更加方便,灵活,快捷。在底层string类实际上是basic_string模板类的别名,typ...原创 2019-09-12 10:28:35 · 308 阅读 · 0 评论 -
C++ 用两个队列实现一个栈
下面两幅图分别是栈和队列的简单介绍:1.入栈(push)入栈时,给其中一个队列入相同的数据。2.出栈(pop)queue1出队一个数据,将这个数据入队进queue2,直至queue1.size()==1出队结束。3.取栈顶(top)栈顶元素为queue1.head的值。代码实现:(代码中head = back,tail = front)#include<i...原创 2019-10-10 11:17:34 · 581 阅读 · 0 评论 -
C++用两个栈实现一个队列
下面两幅图分别是栈和队列的简单介绍:1.push(入队)入队时,给stack1入相同的数据。2.pop(出队)1.先将 stack1 栈顶的数据入栈到 stack2 中,每次 pop 掉 stack1 中的数据,直至 stack1.size()==1为止。2.再将 stack2 中的数据出栈进 stack1 中。3.代码实现#include<iostream>...原创 2019-10-10 16:26:34 · 645 阅读 · 0 评论