自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 01背包问题

dp[i][j]:前i个物品在容量为j的背包中的最大价值。

2025-04-10 16:27:29 121

原创 A+B高精度

【代码】A+B高精度。

2025-04-09 18:47:49 81

原创 排序算法大全

【代码】排序算法大全。

2025-03-30 15:59:03 236

原创 堆排序,基于大根堆的递增排序

【代码】堆排序,基于大根堆的递增排序。

2025-03-28 21:18:04 88

原创 洛谷二分查找提高组 p2678 跳石头

【代码】洛谷二分查找提高组 p2678 跳石头。

2025-03-22 21:23:17 96

原创 二分查找 洛谷p1873

【代码】二分查找 洛谷p1873。

2025-03-20 22:44:36 108

原创 二分查找 原题在洛谷p1102 A-B数对

【代码】二分查找 原题在洛谷p1102 A-B数对。

2025-03-20 21:53:12 85

原创 洛谷P1162 填涂颜色 dfs算法题

由数字 0 组成的方阵中,有一任意形状的由数字 1 构成的闭合圈。现要求把闭合圈内的所有空间都填写成 2。如果从某个 0 出发,只向上下左右 4 个方向移动且仅经过其他 0 的情况下,无法到达方阵的边界,就认为这个 0。闭合圈不一定是环形的,可以是任意形状,但保证。的 0 是连通的(两两之间可以相互到达)。

2025-03-16 14:46:51 210

原创 图的邻接矩阵法,广度优先遍历,dfs

/假设y是x的邻接点,返回除y之外顶点x的下一个顶点号。//在图G中给x,y添加一条边。//求图中顶点x的第一个邻接点。//删除图G中x到y这条边。//获取图中x到y的权值。//在图G中插入顶点x。//在图G中删除顶点x。

2025-03-15 15:08:10 266

原创 无向图的邻接矩阵法,BFS

w = NextNeighbor(G, temp, w)) {//将该节点的邻接点都入队。if (visited[w - 'A'] == 0) {//确保其没有被访问,避免出现回路。//从x开始遍历,将x压入队列。//出队并访问该节点。//该节点已经被访问。//假设y是x的邻接点,返回除y之外顶点x的下一个顶点号。//在图G中给x,y添加一条边。//求图中顶点x的第一个邻接点。//删除图G中x到y这条边。//获取图中x到y的权值。//在图G中插入顶点x。//在图G中删除顶点x。

2025-03-14 22:26:53 321

原创 并查集,find函数的压缩路径,Union函数的小树合并大树

/更新结点个数,每个根节点的数组值为连接的结点个数。printf("5的根节点是%d\n",find(S,5));printf("6的根节点是%d\n",find(S,6));printf("5的根节点是%d\n",find(S,5));printf("6的根节点是%d\n",find(S,6));//压缩路径,将k到根节点的所有结点都变为根节点的直接后继。//实现"查"的操作,查这个元素所属的根节点的下标。//用森林的双亲表示法的思想,表示并查集。//实现"并"的操作,小树并到大树里面。

2025-03-12 15:16:59 402

原创 后序线索化二叉树,并找到指定结点前驱,非递归逆序输出

if(curRoot->rtag==1){//表示右孩子被线索化,没有右孩子。if(root->ltag==0){//确保其左孩子不是线索。if(root->rtag==0){//确保其右孩子不是线索。if(q->lchild==NULL){//左子树为空,建立前驱线索。//用来判断一个结点是否有线索。//后序线索化二叉树。=NULL){//非空二叉树才能线索化。//根据后序线索二叉树找到指定结点的前驱结点。//利用后序线索二叉树,逆序输出,非递归。//后序遍历二叉树,一边遍历,一边线索化。

2025-03-08 23:05:16 394

原创 先序二叉树的线索化,并找指定结点的先序后继

/-----------------------------------------在先序线索二叉树中找到指定结点p的先序后继next----------------------------------------//-----------------------------------------在先序线索二叉树中找到指定结点p的先序后继next----------------------------------------if(root->ltag==0){//确保其左孩子不是线索。

2025-03-08 22:32:48 399

原创 中序线索化二叉树,利用线索找前驱和后继

/------------------------------------------------中序遍历二叉树,一边遍历,一边线索化-------------------------------------------------------------//ltag==1,直接返回前驱线索。if(root->ltag==0){//确保其左孩子不是线索。if(root->rtag==0){//确保其右孩子不是线索。if(q->lchild==NULL){//左子树为空,建立前驱线索。

2025-03-08 15:31:52 592

原创 二叉树的层次遍历

/若左孩子非空,将左孩子入队。//若右孩子非空,将右孩子入队。//构建一个辅助队列。//二叉树的层序遍历。

2025-03-06 14:13:06 632

原创 二叉树的链式存储(前序,中序,后序遍历)

/因为根结点的内存是在栈区,除了根节点之外的其他结点的内存是在堆区。printf("中序遍历的结果:\n");printf("前序遍历的结果:\n");printf("后序遍历的结果:\n");TNode tree;//在指定的结点中增加左孩子结点。//在指定的结点中增加右孩子结点。//用递归回收开辟的内存。

2025-03-05 17:07:33 283

原创 字符串的朴素模式匹配算法

if(sstring[i]==compare[j]){//如果匹配则继续往后面匹配。//在主串中,找到与模式串相等的字串,若找不到这样的字串,则返回-1。if(j==clen){//模式串中所有的字符都匹配成功。//朴素模式匹配算法:暴力破解,把主串中所有字串找出来,依次比较。//将模式串的下标从第一个开始。printf("请输入模式串:\n");printf("请输入主串:\n");}else{//如果不匹配。//字符串的模式匹配。

2025-02-08 14:08:43 219

原创 异或的简单介绍和应用

/如果在一个数组中,只有一个元素出现一次,其余的元素出现两次,用0去一次遍历异或数组中的每一个值,得到的便是只出现一次的那个值。printf("该数组中只出现一次的数是:%d\n",returnDiff(arr,9));//异或是一种二进制运算,相同的两个数异或为0,不同的两个数异或为1(相同为0,不同为1)printf("交换后的两个数是:a:%d b:%d\n",a,b);printf("5和5相等\n");//简单应用1:不需要额外的空间,交换两个数。//两个重要的性质 a^a=0 o^a=a。

2025-02-06 14:15:36 345

原创 三对角矩阵(带状矩阵)的压缩存储

printf("请输入一个%d行%d列的三对角(带状)矩阵:\n",size,size);//压缩后的一维数组的大小。else if(i==size-1){//最后一行只有两个元素。//根据映射关系,打印压缩存储中的数据,和原来的三对角矩阵一样的效果。//一个5行5列的矩阵。if(i==0){//第一行只有两个元素。printf("压缩存储后的打印:\n");else{//其他行都有三个元素。//压缩存储的函数,返回一个一维数组。//返回(a-b)的绝对值。//以下是一个三对角矩阵。

2025-02-06 13:41:44 297

原创 三角矩阵的压缩存储

/压缩存储的一维数组的大小。printf("请输入一个%d行%d列的三角矩阵:\n",size,size);//原本三角矩阵arr[a][b]与压缩后的一维数组下标k的关系。//几行几列的三角矩阵。//三角矩阵就是主对角线和下三角(或者上三角)存储元素,printf("压缩后的打印:\n");printf("该三角矩阵是:\n");//压缩存储的代码,将其存储到一个一维数组中。//上三角(下三角存储的是常数)

2025-02-05 23:16:29 267

原创 对称矩阵的压缩存储

define ArrSize Size*(Size+1)/2 //压缩后的一维数组的长度,只储存主对角线和下三角区域,1+2+......+size=Size*(Size+1)/2。int* condeseSave(int arr[][Size]) {//此函数用来返回压缩存储后的一维数组。#define Size 5 //宏定义,对称矩阵的行数和列数为5。//对称矩阵的压缩储存。

2025-02-05 13:35:50 375

原创 力扣题:检查括号是否匹配,栈的应用

/先判断是否栈中还存在左括号。//再判断括号是否匹配。//销毁一个栈,如果栈不为空,销毁在堆区中开辟的内存。//用结构体封装一个stack类型。//右括号就要进行一些判断。//如果是左括号,就入栈。//出栈,出栈前先判断栈是否为空。//最后看栈是否为空。//压栈,将一个元素压入栈。

2025-01-22 15:06:42 658

原创 队列的链式存储代码

/front是队头指针,用于删除元素 rear是队尾指针,用于插入元素。//将Q->front指向后面一个节点。printf("队首元素是元素是%c\n", c);printf("出队元素是%c\n", c);printf("出队元素是%c\n", c);printf("出队元素是%c\n", c);printf("出队元素是%c\n", c);printf("出队元素是%c\n", c);printf("出队元素是%c\n", c);

2025-01-21 14:38:31 389

原创 队列的顺序存储代码

if ((Q->rear + 1) % maxSize == Q->rear) {//判断队列是否满。printf("元素个数:%d\n", returnLength(&Q));#define elemType char//元素类型为char。//最大容量为10;

2025-01-20 20:25:30 262

原创 栈的链式存储代码

printf("栈顶元素是%c\n",a);

2025-01-20 10:57:21 414

原创 栈的顺序存储代码

inttop;}seqStack;i++){seqStacks;i<50;i+=2){return0;

2025-01-20 10:56:06 337

原创 找一对数,排序+二分查找

/第一行输入数字n(n<=100000)表示数据规模,第二行输入n个整数,第三行输入m,在n个数中找出两个数字相加等于m。//find2函数的方法,先排序,left从数组头开始,right从数组的尾部开始,两头开始往中间找。//find1函数的方法,先排序,再遍历通过二分查找看数组中有没有m-arr[i]的值。

2024-10-25 18:13:28 438

原创 表达式计算,递归的思路,表达式本身的定义就是递归

/用op存储缓冲区第一个字符,但并不从键盘缓冲区取走。//函数cin.peek()用于从键盘缓冲区看第一个字符,但并不会取走第一个字符。while (isdigit(op))//判断op是不是数字。//从键盘缓冲区取出op的字符。//从键盘缓冲区取出op的字符。//函数cin.get()用于从键盘缓冲区读走第一个字符,会取走第一个字符。//判断还没有其他的项。//从缓冲区读走'('//从缓冲区读走')'int expression_value()//表达式。if (op == '(')//看是不是括号。

2024-10-14 19:56:05 1324

原创 经典算法题:走楼梯问题

/走n级阶梯的走法=第一次走1步,n-1级阶梯的走法+第一次走2步,n-2级阶梯的走法。printf("%d级的楼梯走法有%d种\n",n, ret);// 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?// 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。if (n == 1)//递归的终止条件。if (n == 2)//递归的终止条件。//递归的核心思想,将大问题转换为小问题。

2024-10-12 14:59:54 258

原创 N皇后问题,枚举+递归

if(QueenPos[preLine]==row||abs(cur-preLine)==abs(QueenPos[preLine]-row))//如果有皇后位于同一列或者在对角线上,break。void QueenFind(int cur)//假设第0行到第cur-1行的皇后已经摆放好,从cur行开始摆放每个皇后的位置。row++)//从当前cur行的0列开始看。//记录当前皇后的位置。//并递归调用下一行。if(preLine==cur)//如果满足。//N皇后问题 运用递归代替多重循环。

2024-09-27 14:48:42 245

原创 汉诺塔问题(递归的本质,易懂)

/大问题分解为小问题,将num-1个柱子从所在的位置移动到最终的柱子上。//大问题分解为小问题,将num-1个柱子从所在的位置移动到中转柱子上。2.小问题最后能否得到一个解决,这个叫做递归的基例,比如阶乘的例子:最后0的阶乘是1。要将n个圆盘盘从A移动到C------>将n-1个圆盘从A移动到B,再将第n个圆盘从A移动到C,最后再将n-1个圆盘从B移动到C。递归的本质:将大的问题,分解为子问题,比如10!实现递归算法最重要的两步:1.大问题如何分解为小问题(大问题与小问题的关系),这个叫做递归的链条。

2024-09-13 20:54:47 319

原创 枚举算法练习题(完美立方和生理周期)

/ 人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a, b, c, d),使得a3 = b3 + c3 + d3,其中a,b,c,d 大于 1, 小于等于N,且b<=c<=d。// 一个整数,即从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。

2024-09-13 20:01:46 990

原创 罗马数字转整数

c语言简单的算法应用

2024-09-08 19:36:23 862

原创 算法题:跳跃游戏

/ 给你一个非负整数数组 nums ,你最初位于数组的第一个下标。// 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。// 1.如果可以到达的最远位置和当前元素位置一样,并且当前元素为0,那么则返回false。// 判断你是否能够到达最后一个下标,如果可以,返回true;// 思路:从头开始遍历每一个元素,记录从当前元素可以到达的最远位置。// 输入:nums = [2,3,1,1,4]// 2.遍历到最后看是否可以到达。// 输出:true。

2024-09-06 14:20:04 248

原创 字符左旋转的操作

/ 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。// 输入: nums = [1,2,3,4,5,6,7], k = 3。// 向右轮转 1 步: [7,1,2,3,4,5,6]// 向右轮转 2 步: [6,7,1,2,3,4,5]// 向右轮转 3 步: [5,6,7,1,2,3,4]//缺点:时间复杂度超级高,k*O(n)的复杂度。// 输出: [5,6,7,1,2,3,4]//空间损失比较大,时间复杂度为O(n)//方法一:每次移动一个,移动n次。

2024-09-05 12:37:42 382 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除