二分搜索树特性及完整源代码一.特性1.顺序性二分搜索树可以当做查找表的一种实现。我们使用二分搜索树的目的是通过查找 key 马上得到 value。minimum、maximum、successor(后继)、predecessor(前驱)、floor(地板)、ceil(天花板、rank(排名第几的元素)、select(排名第n的元素是谁)这些都是二分搜索树顺序 ......
309
0
0
2022-04-16
二分搜索树节点的删除(remove)在这一小节中,我们会介绍二分搜索树中如何查找最小最大值、最小最大值的删除、删除任意节点(删除只有左孩子的节点、删除只有右孩子的节点和删除左右孩子都存在的节点);下面我们一一讲解:一. 查找最小最大值及其删除查找最小最大值其实很简单,首先我们想一想二分搜索树的定义就会明白,最小值在以跟节点的左孩子节点的左孩子节点………上,看 ......
412
0
0
2022-04-16
二分搜索树的遍历一.遍历的分类二分搜索树遍历分为两大类,深度优先遍历和层序遍历。深度优先遍历分为三种:先序遍历(preorder tree walk)、中序遍历(inorder tree walk)、后序遍历(postorder tree walk),分别为:1、前序遍历:先访问当前节点,再依次递归访问左右子树。2、中序遍历:先递归访问左子树,再访问自身,再 ......
390
0
0
2022-04-15
二分搜索树之查找(Search)-包含(Contain)一. 查找(Search)1. 逻辑前面我们了解了对节点的插入,其实在二分搜索树中对相应节点的查找的过程中也有同样的逻辑下面我们来看看具体的查找(Search):我们在树中查找键值为42的节点将42和41比较,42 > 41,根据二分搜索树的定义可知,我们应该继续往41节点的右孩子查找:此时再将4 ......
316
0
0
2022-04-15
二分搜索树节点的插入一. 定义二分搜索树首先定义一颗二分搜索树,C++代码如下:#include <iostream> #include <queue> #include <cassert> using namespace std; //套用模板函数 template <typename Key, ty ......
323
0
0
2022-04-15
二分搜索树(Binary Search Tree)一.概念及其介绍概念二分搜索树(英语:Binary Search Tree),也称为 二叉查找树 、二叉搜索树 、有序二叉树或排序二叉树。满足以下几个条件:每个节点的键值大于左孩子每个节点的键值小于右孩子以左右孩子为根的子数仍然为二分搜索树优点可以高效的查找数据,还可以高效的插入,删除,及动态维护数据二分搜索 ......
363
0
0
2022-04-15
二分查找法一.介绍二分查找法是一种在计算机中快速查找相应内容的算法,它基于有序数组将其查找,在计算机中广泛使用,已经成为计算机中必不可少的算法,二分查找: 又称为 折半查找,二分查找,适合对已经排序好的数据集合进行查找,时间复杂度O(log2n),效率高。二.逻辑假设有一升序的数据集合{0, 1, 2, 3, 4, 5, 6, 7, 8}先找出升序集合中最中 ......
359
0
0
2022-04-15
昨天我和一些人在闲聊的时候,他们说他们并不真正了解栈是如何工作的,而且也不知道如何去查看栈空间。这是一个快速教程,介绍如何使用 GDB 查看 C 程序的栈空间。我认为这对于 Rust 程序来说也是相似的。但我这里仍然使用 C 语言,因为我发现用它更简单,而且用 C 语言也更容易写出错误的程序。我们的测试程序这里是一个简单的 C 程序,声明了一些变量,从标准输 ......
441
0
0
2022-04-14
一旦你理解了一般原则,C++ 类成员函数指针不再那么令人生畏。如果你正在寻找性能、复杂性或许多可能的解决方法来解决问题,那么在涉及到极端的情况下,C++ 总是一个很好的选择。当然,功能通常伴随着复杂性,但是一些 C++ 的特性几乎难以分辨。根据我的观点,C++ 的 类成员函数指针 也许是我接触过的最复杂的表达式,但是我会先从一些 ......
387
0
0
2022-04-13
数据结构之索引堆(IndexHeap)一.概念及其介绍索引堆是对堆这种数据结构的优化,是利用真正元素的索引值来组成一个堆,可以映射出一个最大堆或者最小堆,索引堆可分为最大索引堆(IndexMaxHeap)和最小索引堆(IndexMinHeap)为什么要索引堆:当我们在使用堆这个数据结构的时候,需要对堆进行一系列的操作,如插入,取出等操作,我们会不断的改变相应 ......
549
0
0
2022-04-12
软件库是重复使用代码的一种简单而合理的方式。软件库是一种是一直以来长期存在的、简单合理的复用代码的方式。这篇文章解释了如何从头开始构建库并使得其可用。尽管这两个示例库都以 Linux 为例,但创建、发布和使用这些库的步骤也可以应用于其它类 Unix 系统。这些示例库使用 C 语言编写,非常适合该任务。Linux 内核大部分由 C 语言和少量汇编语言编写(Wi ......
309
0
0
2022-04-12
如果你知道如何在 C++ 中使用输入输出(I/O)流,那么(原则上)你便能够处理任何类型的输入输出设备。在 C++ 中,对文件的读写可以通过使用输入输出流与流运算符 >> 和 << 来进行。当读写文件的时候,这些运算符被应用于代表硬盘驱动器上文件类的实例上。这种基于流的方法有个巨大的优势:从 C ......
369
0
0
2022-04-10
理解 I/O 有助于提升你的效率。如果你打算学习 C 语言的输入、输出,可以从 stdio.h 包含文件开始。正如你从其名字中猜到的,该文件定义了所有的标准(“std”)的输入和输出(“io”)函数。大多数人学习的第一个 stdio.h 的函数是打印格式化输出的 printf 函数。或者是用来打印一 ......
320
0
0
2022-04-10