- 博客(31)
- 收藏
- 关注
原创 算法竞赛基础之二叉树
二叉树是一种特殊的树形结构,它的特点是每个结点至多只有 2 颗子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,次序不能颠倒。•二叉的意思是每个结点最多只有两个孩子。并不是只有两个孩子。•二叉树的孩子被称为左孩子和右孩子。其顺序是固定的,就像人的左右手不能混淆。1.2、特殊的二叉树满二叉树:⼀棵⼆叉树的所有⾮叶⼦节点都存在左右孩⼦并且所有叶⼦节点都在同⼀层上,那么这棵树就称满⼆叉树。
2025-01-13 17:37:56
885
原创 算法竞赛基础之树的基本概念
•树是一种非线性数据结构,由节点和边组成,用于表示层次结构。•有一个特殊结点,叫做根节点,它没有前驱和后继•除根结点外,其余结点被分成 个互不相交的集合 ,其中每⼀个集合 ⼜是⼀棵树,称这棵树为根节点的⼦树。所以我们可以看出树是递归定义的,所以后续的很多关于树的算法题也是递归解决的。1.2 树的基本用语•结点的度:树中一个结点的孩子个数称为该结点的度。•树的度:树中最大的结点的度叫做树的度。•树的高度(深度):树中结点的最大层数叫做树的高度。•。
2025-01-13 16:51:45
1080
原创 二分和离散化
为什么把二分和离散化放一起:因为离散化其实是一种二分整数的过程。相信大家都接触过二分查找(折半查找),这就是二分的思想。二分通过每次舍弃一半并不存在答案的区间,进而快速锁定要求的答案(二分一定有解,但解不一定就是答案,后面会说)
2024-12-28 23:04:50
1080
原创 快速排序与归并排序
我们拿过递归的定义来感受一下这两个排序算法。递归是一种在数学与计算机科学中常用的算法,它指的是一个过程或函数在其定义中直接或间接地调用自身。递归的定义直接递归:一个函数直接调用自己。间接递归:一个函数通过其他函数间接调用自己。尾递归:递归函数在调用自身后直接传回其值,不对其再加运算。递归的应用场景递归通常用于解决可以被分解为更小、更相似子问题的问题,这些问题的解决方案可以重复应用到这些子问题上。
2024-12-19 20:53:37
620
2
原创 数据结构之栈和队列算法题
思路:两个栈pushst popst 然后往pushst里面push ,每当要出队列或者要去队头数据时,就返回popst的栈顶数据,如果popst为空,就一口气把pushst里面的数据全塞进去。(数组实现)思路:创建K(存有效数据的大小)+1的长度,两个指针(严格来讲应该是下标)指向头和尾。首先说明一点,这只是对栈和队列熟练度的考察,并不是栈的更好地实现方式。思路:两个队列,保证有一个队列为空,然后其余操作基于空队列实现。这一题就是反过来用栈实现队列,要实现后进先出。栈的实现在上面有,不重复拷贝了。
2024-12-17 17:00:19
553
原创 数据结构之链表算法题
我们很容易就可以想到一个解决方案:再创建一个链表,把不是val的结点拿过来尾插。这样确实可以但是,我们每次尾插都需要遍历一遍整个链表,这样时间复杂度就变成了O(n^2),因此我们不妨设置一个tail尾结点来指向它的尾。这里面还有一个潜在的问题就是,假如最后一个节点的数值==val怎么办,想一想。
2024-12-12 18:18:21
759
原创 算法的复杂度
数据结构:相互之间存在一种或者多种关系的数据元素的集合数据元素:是组成数据的,有一定意义的基本单位,在计算机中被当做成体处理。也叫做记录。比如在人类社会中,它的数据元素就是人。畜类中,牛羊猪等就是它的数据元素。数据项:一个数据元素可以由多个数据项组成。比如人的数据项可以由眼睛、鼻子、嘴巴等等。数据对象:具有相同性质的数据元素的集合,是数据的子集。比如人都有生日、姓名、性别,把这些拥有相同数据项的数据元素就称为相同性质的数据元素。时间复杂度。
2024-12-01 12:42:09
1151
原创 动态规划之背包问题
题目描述:有一个容量为m的背包,还有n个物品,他们的重量分别为w1、w2、w3.....wn,他们的价值分别为v1、v2、v3......vn。求可以放进背包物品的最大价值。输入样例:10 42 13 34 57 9输出样例:12解:符号描述:i表示第i个物品,背包容量为j,dp[i][j]表示从下标为0到i,背包容量为j时任意选取物品所得价值的最大值。所以背包问题和函数的递归很像,只不过函数递归时从结果去接近边界,而背包问题是从边界出发,从小问题逐步去接近最终所要求的最优解。
2024-11-26 23:23:44
1386
1
原创 编译和链接
这个时候程序将使⽤⼀个运⾏时堆栈(stack),存储函数的局部变量和返回地址程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程。(3)处理所有的#include,将其产开插到相应的预编译指令处,这个过程是递归进行的,也就是说,包含的头文件中可能有其他的头文件。的任务就是简单的进⾏词法分析,把代码中的字符分割成⼀系列的记号(关键字、标识符、字⾯量、特殊字符等。(4)链接库指的是系统运行是的基本函数集合(加减符号什么的)和第三方库(比如头文件之类的)
2024-11-25 21:06:00
796
原创 数据在内存中的存储
大端存储模式:高地址上存储低字节位,低地址上存储高字节位。小段存储模式:高地址上存储高字节位,低地址上存储低字节位。同上上述,VS2022的存储模式就是小段存储模式。
2024-11-16 15:15:19
1322
原创 C语言的内存函数
这里arr2的首元素是1234,其余全是0。1234的16进制为4D2(内存中的存储看图最右侧)当运行memcpy后可以看到arr1的首元素的第一个字节被改为D2,转化成10进制正好是210。一个整形4个字节,拷贝爱arr2的前20个字节到arr1,即把arr1的前5个整形改为0;- 如果source与destination有任何重叠,拷贝结果是未定义的。memmove基本同memcpy,但是它们两个的区别是。- 比较从ptr1与ptr2往后的num个字节。- 这个函数的作用是将source的前num个。
2024-11-14 21:05:57
961
原创 字符函数和字符串函数
1.字符分类函数1.字符分类函数C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使⽤都需要包含⼀个头⽂件是ctype.h。
2024-11-10 23:18:57
758
原创 超详细!!!深入了解指针(2)
在前面文章提及关键字的时候讲到const可以修饰变量,函数。先来看看例子:const具有常属性的意思,被他修饰的(本质还是变量)。但是如果我么绕过直接对a修改,利用他的地址找到并修改它呢?可以看*pa绕过了const确实把a改了,但是我们用const修饰他不就是为了不被修改吗???所以我们要对const的指针进行限制就可以避免这种情况。1.2const 修饰指针变量const修饰指针可以放在,一个是*前面,一个是*后面,他们的意义是不一样的。
2024-11-09 08:54:43
810
原创 超详细!!!深入了解指针(1)
3.指针变量类型的意义3.1指针的解引用既然指针大小与指针类型无关,那么还要指针类型干什么呢?先看两段代码:调试我们可以看到,上面代码会将n的4个字节全部改为0,但是下面代码只是将n的第⼀个字节改为0。结论:指针的类型决定了,对指针解引用的时候有多大的权限(⼀次能操作几个字节)。3.2指针+-整数依旧先看一段代码char*类型的指针变量+1跳过1个字节,int*类型的指针变量+1跳过了4个字节。结论:指针的类型决定了指针向前或者向后⾛⼀步有多⼤(距离)。3.3void* 指针。
2024-11-08 12:50:27
1201
原创 C语言操作符详解
算数操作符:+ - * / %移位操作符:>> <<位操作符:& | ^赋值操作符:= 、+=、-=、%=、/=、>>=、<<=、&=、|=、^=单目操作符:!++ -- &(取地址) *(解引用) ~(按位取反) sizeof(类型) +(正号) -(负号)关系操作符:> < >= <= ==!逻辑操作符:&& ||条件操作符(三目操作符):?逗号表达式:,下表引用操作符:[]函数调用操作符:()结构体成员访问操作符:. 、 ->
2024-11-02 18:28:18
1217
原创 C语言之扫雷小游戏
1.使用控制台应用实现扫雷功能。2.游戏可以选择游玩与退出,一次不过瘾继续游玩。3.可以自定义棋盘的大小、雷的个数。4.如果选择的位置是雷则炸死游戏结束,如果不是则显示周围雷的个数,直到剩余位置全是雷,游戏胜利。
2024-10-25 21:43:25
1113
原创 C语言学习之函数
函数自定义的一般格式ret_type fun_name(形参)ret_type 函数的返回值类型{} 里面放的是函数功能实现的语句fun_name 是函数名括号中放的是形式参数我们可以形象的把函数比作一个工厂,我们给它提供原料(参数),并告诉他我们想要什么(如返回一个值、实现打印功能、实现两个数的互换),工厂通过自己的手段对原料进行加工(函数体内语句的实现)来完成我们的需求。声明格式:可以简单的记为函数定义加个分号函数的定义也是⼀种特殊的声明,所以如果函数定义放在调⽤之前也是可以的。
2024-10-24 22:12:30
863
原创 C语言学习——数组
我们知道C语言中有许多数据类型,对于单个类型的存储我们可以定义一个变量,那么多个数据类型的存储用什么呢?——数组——数组中存放的是1个或者多个数据,但是数组元素个数不能为0- 数组中存放的多个数据,类型是相同的数组可以分为一维数组和多维数组(二位数组最为常见)
2024-10-21 15:52:46
1042
原创 分⽀和循环
C语言是一门结构化的的语言,而生活中的结构归根结底无非就是顺序结构、分支结构、循环结构。我们才C语言中用if、switch来实现分支,用for、while、do while来实现循环。
2024-10-17 18:35:10
1016
原创 函数递归之青蛙跳台阶问题
F(n)=F(n-1)+F(n-2),以此类推,F(n-1)=F(n-2)+F(n-3)…直到n=1,2 F(1)=1,F(2)=2;想要跳到第n级台阶,无非就是从第n-1级台阶向上跳一级,或者从第n-2级台阶往上跳两级,即。可以发现当n=40时F(3)被计算了39088169次!这就是函数的递归:当我们想要的到这个函数的结果时需要再次调用者函数。我们将跳法的个数叫做F(n),不妨从n比较下的时候寻找一下规律。实际上我们只需要计算一次F(3)即可,下面是优化的代码。那么为什么会这样呢?
2024-10-13 18:21:27
345
原创 C语言数据结构和变量
printf() 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式printf() 不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换⾏。printf() 是在标准库的头⽂件 stdio.h 定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这个头⽂件。
2024-10-12 16:06:07
770
原创 C语言的常见概念
C语⾔把 .c 为后缀的⽂件称为源⽂件,把 .h 为后缀的⽂件称为头⽂件。C语言中一些保留的名字C语⾔的32个关键字如下:externstatic注意:1.关键字不能自己创建2.关键字不能作为变量名3.关键字有的特殊含义 不能自己修改。
2024-10-03 14:03:05
825
原创 初识C语言1.0
c语言是一门面向对象的计算机编程语言,具有良好的跨平台性计算机语言是人与计算机交流的语言:低级语言:由一系列二进制代码组成 (正负电所代表的1/0 代码)汇编语言:将许多二进制代表一个功能 如ADD高级语言:如 c/ c++ java python美国国家标准局在二十世纪八十年代为c语言设定了一份完整的标准语法简称ANSI Cc语言常用的编译器:Clang.Turbo c. WIN/TC. GCC. MSVC。
2024-09-30 12:30:09
293
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人