![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 67
程序员陈子青
年少风流不看红飞翠舞
只把青春一炬
码得三行春 秋
展开
-
基础数论(待更新)
1. 算术基本定理任何一个大于1的自然数N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1^a1* P2^a2* P3^a3... Pn^an2.约数个数N=(a1+1)*(a2+1)*(a3+1) ...(an+1)3.约数之和N=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak)证明:若n可以分解质因数:n=p1^a1...原创 2021-10-31 16:33:02 · 198 阅读 · 0 评论 -
❤️ 图解图论❤️
首先,请大家看完后不要忘了一键三连哦~ 以下硬核总结图的常用搜索算法,收藏关注,不迷路~先看一幅思维导图原创 2021-10-02 02:03:35 · 330 阅读 · 1 评论 -
❤️ 详解KMP算法
由于KMP算法描述起来很抽象,所以很多人难以理解,那么这篇博客将帮你解决这个难题,带你彻底了解KMP的原理以及实现。KMP算法是一种改进的字符串匹配算法,KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next数组实现,next数组本身包含了模式串的局部匹配信息。算法时间复杂度 O(m+n)举个栗子,如给定一个长度为 m 的模式串S,以及一个长度为 n 模板串P,判断 P 是否是 S 的字串要想真正了解KM...原创 2021-09-27 18:06:39 · 998 阅读 · 6 评论 -
NOIP基础算法:双指针、二分、前缀和、差分
目录★★ 双指针★★★★ 二分★浮点数二分★ 一维前缀和、差分★ ★ ★ 二维前缀和、差分★ 难度指数 (个人看法,因人而异)★★ 双指针for (int i = 0, j = 0; i < n; i ++ ){ while (j < i && check(i, j)) j ++ ; // 具体问题的逻辑}常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) 对于两个序列,维...原创 2021-09-27 01:21:44 · 201 阅读 · 0 评论 -
❤️详解经典动态规划算法「背包问题」
1-01背包问题描述有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<...原创 2021-09-21 01:51:07 · 2416 阅读 · 0 评论 -
❤️算法「高精度整数加法、减法、除法、乘法」
目录高精度加法高精度减法高精度乘法高精度除法在执行高精度数运算时,因为溢出问题,整数不能直接用基本类型表示。通常思路是将整数存在字符串中,模拟算术运算进行处理,结果返回正确运算结果的字符串。高精度加法const int BASE = 10;//进制 为10则是以十进制运算//返回a+b string add(string a, string b) { string ret; int index_a = a.size()-1, index_b = b.size原创 2021-08-15 07:36:27 · 253 阅读 · 0 评论 -
❤️简单聊一聊入门级查找算法
目录查找定义及其属性二分查找穷举搜索并行查找查找定义及其属性查找 又称检索或查询,是指在查找表中找出满足一定条件的结点或记录对应的操作。 查找表 在计算机中,是指被查找的数据对象是由同一类型的记录构成的集合,如顺序表, 链表、二叉树和哈希表等 查找效率 查找算法中的基本运算是通过记录的关键字与给定值进行比较,所以查找的效率 同常取决于比较所花的时间,而时间取决于比较的次数。通常以关键字与给定值进行比较的记录 个数的平均值来计算。查找操作及分类 操作原创 2021-08-11 16:50:12 · 182 阅读 · 0 评论 -
❤️ 「七大排序算法」
七大排序预览 排序算法 平均时间复杂度 最好情况 最坏情况 排序方式 稳定性 冒泡排序 O(n * n) O(n) O(n * n) In-place 稳定 选择排序 O(n * n) O(n * n) .原创 2021-08-10 07:26:14 · 636 阅读 · 0 评论 -
❤️ 「呕心之作」 一篇博客带你精通「 五大核心算法」❤️
目录一、分治法思想原理具体步骤例题1算法结语二、动态规划算法思想原理具体步骤算法实现算法结语三、回溯算法 算法思想 基本步骤 例题2 算法实现算法结语四、贪心算法 思想原理基本步骤例题3算法实现算法结语五、分支定界法 算法原理算法步骤例题算法实现算法结语博文结语写在前面:很多人...原创 2021-08-01 05:17:34 · 1162 阅读 · 7 评论 -
「个人记录 」C++ 容器 find() 算法使用过程中的系列问题
目录find()函数定义问题1:空指针错误问题2:自定义类型比较问题3:容器中元素类型为指针find()函数定义template<class InputIterator, class Type>InputIterator find(InputIterator _First, //一个输入迭代器,它在要搜索指定值的范围内寻址第一个元素的位置。InputIterator _Last, //一个输入迭代器,用于在要搜索的指定值范围内的最后一个元素之后的位置进行寻址。c原创 2021-07-30 18:04:52 · 478 阅读 · 0 评论 -
❤️详解「 A*」算法原理及其算法实现(C/C++描述)
定义和概念A*算法,A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快(百度百科)百科百科将A*算法定义为求解最短路径,我认为不够严谨。A*算法较之传统的路径规划算法,实时性更高、灵活性更强,寻路结果更加接近人工选择的路径结果. A*寻路算法并不是找到最优路径,只是找到相对近的路径,因为找最优要把所有可行路径都找出来进行对比,消耗性能太大,寻路效果只要相对近路径就行了。也因此在静原创 2021-07-29 02:12:44 · 2713 阅读 · 10 评论 -
❤️详解「 邻接表 」原理、算法实现及其深度优先遍历、广度优先遍历(C/C++描述)
图的表示:邻接表邻接表结构原理在邻接列表实现中,每一个顶点会存储一个从它这里开始的相邻边的列表。比如,如果顶点 B 有一条边到 A、C 和 E,那么 A 的列表中会有 3 条边。邻接列表只描述指向外部的边。B 有一条边到 A,但是 A 没有边到 B,所以 B 没有出现在 A 的邻接列表中。 查找两个顶点之间的边或者权重会比较费时,因为遍历邻接列表直到找到为止。 邻接表的数据结构typedef struct _EdgeNode//与结...原创 2021-07-25 18:27:33 · 17039 阅读 · 8 评论 -
哈希表的原理及其算法实现(C/C++描述)
目录定义相关属性算法实现1)数据结构2)哈希函数3)哈希链表初始化4)哈希链表查找元素5)哈希链表插入元素6)哈希表删除元素程序清单定义哈希表 - 散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。相关属性键(key): 组员的编号 如, 1 、 5 、 19值(value): 组员的其它信息(包含 性别、年龄和战斗力等) 索引: 数组的下标(0,1,2,3,4) ,用以快速定位和检索数据 .原创 2021-07-24 21:36:44 · 1551 阅读 · 6 评论 -
二叉搜索(排序)树的算法实现(C++描述)
目录定义数据结构二叉搜索树插入节点二叉搜索树删除节点二叉搜索树搜索二叉树的遍历程序清单定义二叉搜索树又称二叉查找树、二叉排序树(Binary Sort Tree)。它是一颗空树或是满足下列性质的二叉树:1)若左子树不空,则左子树上所有节点的值均小于或等于它的根节点的值;2)若右子树不空,则右子树上所有节点的值均大于或等于它的根节点的值;3)左、右子树也分别为二叉排序树。数据结构二叉树一般采用链式存储方式:每个结点包含两个指针域,指...原创 2021-07-23 22:02:26 · 518 阅读 · 10 评论 -
数据结构之树的定义、属性以及二叉树的定义与分类
目录树的定义树的属性二叉树二叉树的性质完全二叉树满二叉树平衡二叉树二叉搜索树红黑树树的定义树状图是一种数据结构,它是由 n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: ①每个结点有零个或多个子结点;②没有父结点的结点称为根结点;③每一个非根结点有且只有一个父结点;④除了根结点外,每个子结点可以分为多个不相交的子树;树的属性.原创 2021-07-23 02:00:47 · 394 阅读 · 4 评论 -
数据结构之栈的定义、属性以及算法实现(C/C++描述)
栈定义栈也是一种线性表,只不过它是操作受限的线性 表,只能在一端操作。 进出的一端称为栈顶(top),另一端称为栈底(base)。栈可以用顺序存储,也可以用链式存储。栈的顺序存储其中,base 指向栈底,top 指向栈顶。 注意:栈只能在一端操作,后进先出,这是栈的关键特征,也就是说不允许在中间查找、取值、插入、删除等 操作,我们掌握好顺序栈的初始化、入栈,出栈,取栈顶元素等操作即可。栈的初始化入栈入栈操作:判...原创 2021-07-22 15:29:09 · 559 阅读 · 1 评论 -
数据结构之堆的定义、属性以及算法实现(C/C++描述)
目录堆的定义最大堆堆的一般规律在数组中快速创建堆堆的算法实现最大堆中插入元素堆顶元素出列堆的定义堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。(来自百度百科)最大堆每个节点最多可以有两个节点 根节点的键值是所有堆节点键值中最大者,且每个父节点的值都比其左右孩子结点的值大 除了根节点、最后一个左子节点可以没有兄弟节点,其余节点必须有兄弟节点。如图 ...原创 2021-07-21 18:14:03 · 769 阅读 · 6 评论 -
数据结构之队列的定义、属性以及算法实现(C/C++描述)
目录队列定义顺序的顺序存储队列的链式存储循环队列队列定义 队列是一种受限的线性结构 它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。顺序的顺序存储 算法实现:采用数组来保存队列的元素,设立一个队首指针 front ,一个队尾指针 rear,分别指向队首和队尾元素。则 rear-front 即为存储的元素个数! 数据结构设计:#define MaxSize...原创 2021-07-20 17:45:03 · 239 阅读 · 0 评论 -
数据结构之链表的定义、属性以及算法实现(C/C++描述)
链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不必须相邻,那么 怎么表示逻辑上的相邻关系呢?可以给每个元素附加一个指针域,指向下一个元素的存储位 置。如图所示: 从图中可以看出,每个结点包含两个域:数据域和指针域,指针域存储下一个结点的地址, 因此指针指向的类型也是结点类型 链表的核心要素: 每个节点由数据域和指针域组成 指针域指向下一个节点的内存地址...原创 2021-06-03 21:36:32 · 742 阅读 · 0 评论 -
数据结构之顺序表的定义、属性以及算法实现(C/C++描述)
顺序表是简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以 快速定位第几个元素,中间不允许有空值,插入、删除时需要移动大量元素。 顺序表的三个要素: 用 elems 记录存储位置的基地址 分配一段连续的存储空间 size 用 length 记录实际的元素个数,即顺序表的长度结构体定义#define MAX_SIZE 100 struct _SqList{ ElemType *elems; // 顺序表的基地址 int len.原创 2021-05-17 21:17:37 · 1362 阅读 · 9 评论