随笔分类 -  C/C++

摘要:堆 堆的概念 堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象,即是一种顺序储存结构的完全二叉树。1 提示:完全二叉树 完全二叉树:对一棵深度为k、有n个结点二叉树编号后,各节点的编号与深度为k的满二叉树相同位置的结点的编号相同,这颗二叉树就被称为完全二叉 阅读全文
posted @ 2022-04-09 15:57 CairBin 阅读(557) 评论(0) 推荐(0) 编辑
摘要:欧几里得算法 介绍 概念 欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。 公式 计算公式gcd(a,b) = gcd(b,a mod b) GCD、LCM 注:最大公因数求法还有辗转相减法等方法 GCD(最大公约数) //求a,b最大公约数 阅读全文
posted @ 2022-04-06 14:33 CairBin 阅读(132) 评论(0) 推荐(0) 编辑
摘要:并查集 说明 并查集是一种精巧使用的数据结构,主要用于处理一些不相交的集合合并问题。经典的例子有连通子图、最小生成树Kruskal算法和LCA等。 原理 将编号分别为1~n个对象分为不相交的集合,每个集合中,选择其中某个元素代表所在的集合。在这个集合中,并查集的操作有初始化、合并、找查。 步骤 初始 阅读全文
posted @ 2022-04-03 18:45 CairBin 阅读(49) 评论(0) 推荐(0) 编辑
摘要:二叉树及其遍历 二叉树概念定义 什么是二叉树 二叉树特点是每个节点最多只能有两棵子树,且有左右之分的树。 注:关于数据结构——树的一些基本概念可以参考《树的概念及基本术语》 - CairBin's Blog 二叉树的基本性质 关于二叉树的基本性质前面已经写的很详细了,可以回顾文章《二叉树》 - Ca 阅读全文
posted @ 2022-03-07 01:32 CairBin 阅读(63) 评论(0) 推荐(0) 编辑
摘要:DFS与N皇后问题 DFS 什么是DFS DFS是指深度优先遍历也叫深度优先搜索。 它是一种用来遍历或搜索树和图数据结构的算法 注:关于树的一些知识可以去看《树的概念及基本术语》这篇文章 它会不断地沿着节点的深度方向(该深度方向为其邻接点的方向)进行遍历 DFS如何实现 DFS主要步骤有以下几步 访 阅读全文
posted @ 2022-03-06 12:10 CairBin 阅读(75) 评论(0) 推荐(0) 编辑
摘要:哈希排序算法 说明 哈希算法是一种以空间换取时间的算法。 下面以一个例题的方式来进一步说明这个算法。 时间复杂度 O(n) 例题 问题描述 HDU 1425 “Sort” 给你n个整数,请按从大到小的顺序输出其中前m大的数。 输入:每组数据有两行,第一行有两个数n和m(0<n,m<1000000), 阅读全文
posted @ 2022-03-04 22:01 CairBin 阅读(492) 评论(0) 推荐(0) 编辑
摘要:归并排序 定义 归并排序是一种采用分治法,即先使每个子序列有序,再使子序列段间有序,然后合成一个完整的有序表的有效排序方法。 主要步骤 划分 排序 合并 实际过程 实际过程如下图(图片来自百度) 代码 核心代码 merge() 因为我们在此使用了递归的方式,对于临时数组temp在此函数内不好写,所以 阅读全文
posted @ 2022-02-15 21:21 CairBin 阅读(47) 评论(0) 推荐(0) 编辑
摘要:高精度减法 简介 用于计算含有超过一般变量存放不下的非负整数 高精度加法这个过程是模拟的小学竖式减法计算 注:在本文中,我们默认输入的第一个数为被减数,且被减数大于减数 原理基本上与高精度加法相同,仅在核心代码处有些区别,因此本文较为简略,建议先阅读文章《高精度加法(C++实现)》 主要步骤 清零 阅读全文
posted @ 2022-01-24 15:34 CairBin 阅读(786) 评论(0) 推荐(0) 编辑
摘要:高精度加法 简介 用于计算含有超过一般变量存放不下的非负整数 高精度加法这个过程是模拟的小学竖式加法计算 步骤 以下有顺序之分 数组清零 输入 获取长度 逆置 字符型数字转成对应的整型数字 计算并输出 简单来看重要的步骤也就以下几步 清零 逆置 转换 相加计算(包含进位) 代码实现 逆置 因为数组存 阅读全文
posted @ 2022-01-16 15:19 CairBin 阅读(395) 评论(0) 推荐(0) 编辑
摘要:快速幂及其模 前提 typedef long long int ll; 快速幂 时间复杂度 O(log2(N)) 原理 幂指数以二进制的形式参与计算 然后把ab转化为 通项为 **a( 2^n(0或1))** 求0到n项和的多项式 代码 ll quick_pow(ll a, ll b) { ll r 阅读全文
posted @ 2022-01-05 13:23 CairBin 阅读(38) 评论(0) 推荐(0) 编辑
摘要:队列 队列的定义 队列简称队,是一种受限制的线性表,仅允许在表的一端插入,在表的另一端进行删除。 进行插入的一端叫做队头 进行删除的一端叫做队尾 队的特点 **先进先出(FIFO) ** 顺序队(循环队列) 顺序队主要以循环队列的形式出现 循环队列的要素 队空状态 qu.rear == qu.fro 阅读全文
posted @ 2021-12-18 18:17 CairBin 阅读(146) 评论(0) 推荐(0) 编辑
摘要:二叉树 二叉树的定义 二叉树在一般的树上加了两个限制条件: 每个结点最多只有两个子树 子树有左右之分,不能颠倒 二叉树的形态 空二叉树 只有根结点 只有左子树,右子树为空 只有右子树,左子树为空 既有左子树,又有右子树 满二叉树、完全二叉树以及非完全二叉树 满二叉树:所有的分支结点都有左、右子节点, 阅读全文
posted @ 2021-11-21 15:41 CairBin 阅读(466) 评论(0) 推荐(0) 编辑
摘要:DevC++ 报错[Error] Id returned 1 exit status 起因 学校机房的计算机总是二次编译总是报错 报错提示 [Error] Id returned 1 exit status 解决方案 前提 首先查看下你的程序的控制台窗口有没有关闭,关闭后再重新编译是否报错。 以下方 阅读全文
posted @ 2021-11-20 13:24 CairBin 阅读(1711) 评论(0) 推荐(1) 编辑
摘要:选择排序 代码 void selSort(int R[], int n) { for(int i=0; i<n; i++) { int temp = i; int j; for (j=i+1; j<n; j++) { if (R[j]<R[temp]) temp=j; } if ( temp!=i 阅读全文
posted @ 2021-11-05 13:37 CairBin 阅读(31) 评论(0) 推荐(0) 编辑
摘要:串 串的定义 概念 串是由零个或多个字符数组组成的有限序列。 串中字符的个数称为串的长度,含有零个元素的叫空串。 串是限定了元素为字符的线性表 (注:串与一般的线性表操作有很大区别,线性表主要针对表内的某个元素,而串操作主要针对子串) 代码 在C语言中,一个串可以如下定义,但仅以'\0'作为结束符时 阅读全文
posted @ 2021-11-05 01:20 CairBin 阅读(1060) 评论(0) 推荐(0) 编辑
摘要:树 树的定义 树是一种非线性数据结构,它是若干结点的集合。 是由唯一的根和若干不相交的子树组成的。 子树又是一颗树,因此树的定义是递归的。 树的结点数目可为0,此时称之为空树。 树的基本术语 结点(结点包含数据元素和指向子树的分支) 路径:一个结点和另一个经过的边和结点的序列 根(根结点):一棵树的 阅读全文
posted @ 2021-10-31 16:52 CairBin 阅读(574) 评论(0) 推荐(0) 编辑
摘要:找素数 暴力求解 时间复杂度: O(n*sqrt(n)) 原理 暴力求解是对[m,n]的每一个整数都判断是否为素数,由数学可知,一个数i的因数关于sqrt(i)对称分布,故我们只需判断[2,sqrt(i)]的整数中有没有i的因数即可 代码 vector<int> fuckingFindPrime(i 阅读全文
posted @ 2021-10-30 16:46 CairBin 阅读(163) 评论(0) 推荐(0) 编辑
摘要:代码 /* 快速排序 对low至high的位置进行排序 */ void QuickSort(int R[], int low, int high) { int temp, i = low, j = high; if(i<j) { temp = R[low]; //下面将小于temp的数放置在temp 阅读全文
posted @ 2021-10-25 13:30 CairBin 阅读(37) 评论(0) 推荐(0) 编辑
摘要:代码 /* * 冒泡排序 * 参数: 参与排序的数组, 数组元素个数 */ void BubbleSort(int R[], int n) { int i, j; bool flag; for(i = n-1; i>=1; i--) { flag = false; //用于标记本次循环是否发生交换 阅读全文
posted @ 2021-10-17 09:32 CairBin 阅读(34) 评论(0) 推荐(0) 编辑
摘要:本文为了方便理解,先上代码再做解释 插入排序代码 void InsertSort(int R[], int n) { int i,j, temp; for(i = 1; i<n; i++) { temp = R[i]; j = i-1; while(j >= 0 && temp < R[j]) { 阅读全文
posted @ 2021-10-14 00:01 CairBin 阅读(30) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示