摘要: 命令行通讯录: 1、功能:添加联系人(姓名/电话号码(9位数)/邮箱)、移除、查询、修改、显示所有联系人、保存到本地文本文件/从文件加载 2、训练重点:结构体/类的封装、vector存储自定义对象、map<string, 结构体>快速查询、文件流(fstream)的读写、函数分模块实现(增删改查各写 阅读全文
posted @ 2026-04-20 15:35 myLv 阅读(12) 评论(0) 推荐(0)
摘要: 一、什么是KMP算法? KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,用于在一个文本串中查找模式串的出现位置。 核心思想: KMP算法通过预处理模式串,构建一个"部分匹配表"(也称为next数组或failure function),当匹配失败时,利用这个表跳过不必 阅读全文
posted @ 2026-04-20 15:35 myLv 阅读(24) 评论(0) 推荐(0)
摘要: 一、介绍 通过把 关键码值key映射到表中一个位置(数组的下标) 来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表,即哈希表。哈希表是一种典型的“以空间换时间”的做法。 键(key): 组员的编号 值(value): 组员的其他信息(值大小、姓名、年龄等) 索引: 数 阅读全文
posted @ 2026-04-20 15:35 myLv 阅读(14) 评论(0) 推荐(0)
摘要: 一、 使用头文件 #include <chrono> 这是C++中精度最高的计时方式 #include <iostream> #include <chrono> int main() { // 记录开始时间 auto start = std::chrono::high_resolution_cloc 阅读全文
posted @ 2026-04-20 15:35 myLv 阅读(28) 评论(0) 推荐(0)
摘要: 一、欧几里得算法 其实就是辗转相除法求最大公约数gcd 定理: gcd(a, b) = gcd(b, a%b),其中a%b != 0,gcd(a, b)表示a与b的最大公约数 // 1. int get_gcd(int a, int b) { if (b == 0) return a; else r 阅读全文
posted @ 2026-04-20 15:35 myLv 阅读(22) 评论(0) 推荐(0)
摘要: 一、介绍 作用: 平衡二叉树的精髓就在于平衡。对于普通的BST,若节点多的话,就很容易出现左右不协调的问题,即左边很高,右边很矮,或者相反,从而导致search过程很慢,而平衡二叉树可以让左右子树的高度差在1范围内,这样就可以避免左右不协调的问题,加快search速度。 核心: abs(Height 阅读全文
posted @ 2026-04-20 15:35 myLv 阅读(9) 评论(0) 推荐(0)
摘要: 一、介绍 类比浏览器的搜索功能,近期搜索的内容会在搜索记录的最上方,而之前的则相对较为下面,这就是伸展树的原理:将上一次Search的节点通过一系列AVL树的旋转操作变为树的根。 二、伸展操作 从底向上沿着访问路径旋转,令node为访问路径上的一个"非根节点" 若node的父节点是根节点,那么只要旋 阅读全文
posted @ 2026-04-20 15:35 myLv 阅读(8) 评论(0) 推荐(0)
摘要: 当知道前序遍历、中序遍历、后序遍历中的两种遍历方式,就能够反推出二叉树的结构了。 但是要注意一点:已知前序遍历&后序遍历结果时,二叉树不能有节点的度为1!!! 提醒: 此处默认二叉树节点存储的值为int类型,其他类型,如char等可以将vector换为string等 例题:遍历问题,美国血统 一、已 阅读全文
posted @ 2026-04-20 15:35 myLv 阅读(16) 评论(0) 推荐(0)
摘要: 一、说明 优先队列是一种特殊的队列,其中每个元素都有一个优先级。出队操作总是返回具有最高优先级的元素,而不是等待时间最长的元素。 二、特点 有序性:元素按照优先级排序,而不是按插入顺序 动态性:支持动态插入和删除操作 高效性:插入和删除操作的时间复杂度为O(log n) 三、实现原理 优先队列通常使 阅读全文
posted @ 2026-04-20 15:35 myLv 阅读(34) 评论(0) 推荐(0)