上一页 1 2 3 4 5 6 7 8 9 ··· 18 下一页
摘要: AVL树 在“二叉搜索树”章节提到,在多次插入和删除操作后,二叉搜索树可能退化为链表。在这种情况下,所有操作的时间复杂度将从O(logn)劣化为O(n)。 如下图,经过两次删除节点操作,这棵二叉搜索树便会退化为链表 再例如,下图所示的完美二叉树中插入两个节点后,树将严重向左倾斜,查找操作的时间复杂度 阅读全文
posted @ 2024-09-04 16:24 风陵南 阅读(670) 评论(0) 推荐(0)
摘要: explicit关键字 在C++中,explicit关键字用于控制某些类型转换的隐式性。它主要与构造函数和转换操作符相关联,下面详细介绍explicit关键字的使用和作用。 explicit构造函数 当构造函数被声明为explicit时,它指示的这个构造函数只能使用显式构造对象,不能用于隐式类型转换 阅读全文
posted @ 2024-09-04 09:58 风陵南 阅读(217) 评论(0) 推荐(0)
摘要: 列表初始化 在C++11及以后的版本中,使用{}来初始化变量是一种新的初始化方法,称为列表初始化(List Initialization)。这种初始化方法可以用来初始化内置类型、自定义类型以及聚合类型。 示例代码: /*AVL 树节点类*/ struct TreeNode{ int val{}; i 阅读全文
posted @ 2024-09-04 09:44 风陵南 阅读(122) 评论(0) 推荐(1)
摘要: 二叉搜索树 二叉搜索树(binary search tree)满足以下条件: 对于根节点,左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。 对于任意节点的左、右子树也是二叉搜索树,同样满足上一条件。 二叉搜索树的操作 我们将二叉搜索树封装为一个类BinarySearchTree,并声 阅读全文
posted @ 2024-09-03 16:34 风陵南 阅读(256) 评论(0) 推荐(0)
摘要: 二叉树数组表示 在链表表示下,二叉树的存储单元为节点TreeNode,节点之间通过指针相连接。同前面的队列或栈,二叉树同样可以使用数组来表示。 表示完美二叉树 给定一棵完美二叉树,我们将所有节点按照层序遍历的顺序存储在一个数组中,则每个节点都对应唯一的数组索引。 按照层序遍历的特性,我们可以推导处父 阅读全文
posted @ 2024-09-03 11:04 风陵南 阅读(573) 评论(0) 推荐(0)
摘要: 二叉树 二叉树(binary tree)是一种非线性数据结构,代表“祖先”与“后代”之间的派生关系,体现了“一分为二”的分治逻辑。与链表类似,二叉树的基本单元是节点,每个节点包含值、左子节点引用和右子节点引用。 struct TreeNode{ int val; // 节点值 TreeNode *l 阅读全文
posted @ 2024-09-02 17:29 风陵南 阅读(921) 评论(0) 推荐(0)
摘要: 哈希算法 前面介绍了哈希表的工作原理和哈希冲突的处理方法。然而无论是开放寻址还是链式地址,它们只能保证可以在发生冲突时正常工作,而无法减少哈希冲突的发生。 如果哈希冲突过于频繁,哈希表的性能则会急剧劣化。如下图所示,对于链式哈希表,理想情况下键值对均匀分布在各个桶中,达到最佳查询效率;最差情况所有键 阅读全文
posted @ 2024-08-28 17:29 风陵南 阅读(497) 评论(0) 推荐(0)
摘要: 哈希冲突 通常情况下哈希函数那点输入空间远大于输出空间,因此理论上哈希冲突是不可避免的。比如输入空间为全体整数,输出空间为数组容量大小,则必然有多个整数映射至同一个桶索引。 哈希冲突会导致查询结果错误,严重影响哈希表的可用性。为了解决该问题,每当遇到哈希冲突时,我们就进行哈希表扩容,直至冲突消失。此 阅读全文
posted @ 2024-08-28 15:29 风陵南 阅读(203) 评论(0) 推荐(0)
摘要: 哈希表 哈希表(hash table),又称散列表,它通过建立键key与值value之间的映射,实现高效的元素查询。具体而言,我们向哈希表中输入一个键key,则可以在O(1)时间内获取对应的值value。 除哈希表外,数组和链表也可以实现查询功能,他们的效率对比如下表: 添加元素:仅需将元素添加至数 阅读全文
posted @ 2024-08-27 15:21 风陵南 阅读(226) 评论(0) 推荐(0)
摘要: 队列 队列(queue)是一种遵循先入先出规则的线性数据结构。队列模拟了排队现象,即新来的人不断加入队列尾部,而队列头部的人逐个离开。 如图所示,我们将队列头部称为“队首”,尾部称为“队尾”,将把元素加入队列尾部的操作称为“入队”,删除队首元素的操作称为“出队”。 队列常用操作 方法名 描述 时间复 阅读全文
posted @ 2024-08-27 10:16 风陵南 阅读(133) 评论(0) 推荐(0)
摘要: 栈 栈(stack)是一种遵循先入后出逻辑的线性数据结构。 如图所示,我们将堆叠元素的顶部称为“栈顶”,底部称为“栈底”。将吧元素添加到栈顶的操作叫做“入栈”,删除栈顶的操作叫做“出栈”。 栈的常用操作 方法 描述 时间复杂度 push() 元素入栈(添加至栈顶) O(1) pop() 栈顶元素出栈 阅读全文
posted @ 2024-08-26 15:24 风陵南 阅读(157) 评论(0) 推荐(0)
摘要: 内存与缓存 数组和链表两种数据结构分别代表了“连续存储”和“分散存储”两种物理结构。实际上,物理结构在很大程度上决定了程序对内存和缓存的使用效率,进而影响算法程序的整体性能。 计算机存储设备 计算机中包括三种类型的存储设备:硬盘(hard disk)、内存(random-access memory, 阅读全文
posted @ 2024-08-26 10:41 风陵南 阅读(137) 评论(0) 推荐(0)
摘要: 链表 内存空间是所有程序的公共资源,在一个复杂的系统运行环境下,空闲的内存空间可能散落在内存各处。存储数组的空间必须是连续的,而当数组非常大时,内存可能无法提供如此大的连续空间,此时链表的灵活性优势就体现出来了。 链表是一种线性数据结构,其中的每个元素都是一个节点对象,各个节点通过“引用”相连接。引 阅读全文
posted @ 2024-08-23 14:42 风陵南 阅读(96) 评论(0) 推荐(0)
摘要: 基本数据类型 基本数据类型是计算机CPU可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种 整数类型byte、short、int、long。 浮点数类型float、double,用于表示小数 字符类型char,用于表示各种语言的字母、标点符号甚至表情符号等。 布尔类型bool,用于表示“是 阅读全文
posted @ 2024-08-23 10:17 风陵南 阅读(335) 评论(0) 推荐(0)
摘要: 数据结构的分类 常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图,它们可以从“逻辑结构”和“物理结构”两个维度进行分类 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线性关系;而在数中,数据从顶部向下按层次排列,表现出“ 阅读全文
posted @ 2024-08-22 16:25 风陵南 阅读(282) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 9 ··· 18 下一页