- 博客(27)
- 收藏
- 关注
原创 线段树(C/C++)
用数组的方式表示树结构其实就是树的静态存储方式,它受限于数组的大小,需要提前确定好数组的大小,而节点链式存储是树的动态存储,其存储大小不受限,当然静态存储时以牺牲空间来换取时间的方法。如果我们有很多数据保存在一个数组中,而我们要对这个数组进行一些操作,那么使用传统的循环来控制的话,时间复杂度太大,特别是一些算法题很容易超时,这时候线段树可以帮我们解决,将复杂度降为nlog(n),在此说明:线段树的应用通常是一些区间求和,区间修改,区间最大值、最小值等操作。进行区间修改时,采用lazy标记,传递修改信息。
2024-04-28 14:00:13
268
1
原创 模拟竖式乘法
首先我们应该要遍历乘数的每一个数字,再乘被乘数的每一数位上的数字,然后相加。首先,我们应该明白,进位就是乘出来的积大于10了,所以我们要进一位,因为我们采用的是10进制,所以我们把乘出来的数对10求整,也就是/10,那么得出来的就是进位的数字,那么我们知道,最后就是将乘出来的积相加。其实这是不同数位的权重所导致,乘到十位时,十位的权重是10的1次方,所以我们其实往左偏移一位其实是在后边加0,那为什么个位不用偏移呢,其实不然,个位也要乘以它的数位权值,只不过个位的权值是10的0次方为1,所以我们偏移值为0。
2024-04-20 21:20:23
620
原创 《算法竞赛入门经典》第二章习题
写在前面的话:做算法实在太需要毅力和耐心了,希望每一学算法的伙伴们都能一直坚持下去,浙江大学翁凯老师曾说过:所有计算机程序都是人为设计出来的,既然别人能做到,那你也能做到。今天我要分享的是我记录刷题的每一天,希望有一天回头看时,感慨这一路的艰辛。数据,每组数据包含3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人。输入正整数n≤20,输出一个n层的倒三角形。
2024-04-16 20:25:47
224
原创 算法入门之归并排序
分治法是归并排序的主要思路,首先将要排序的数组分为尽量相等长的两部分,紧接又继续往下分,一直分到一个数组里有一个元素即可(采用递归),因为每一个元素都自带有序性,然后就是合并了,合并的过程就是一种排序。我们不难发现,归并排序每一次排序就是一次逆序重组,我们只要加入一个计数器,而每一次重新排序的时候,还未加入到辅助数组里的元素m-p个都比辅助数组里的元素大,所以只要连加m-p就可以。以下我将具体介绍思路:假设有一个长度为5的数组,里面元素有5,9,12,1,4;,求它的逆序对数,即有多少个有序对。
2024-04-13 16:00:58
277
原创 应用lambda表达式对学生成绩列表进行排序
首先定义一个保存学生成绩的列表。将每名学生的信息都保存在一个字典中,然后根据学生的总成绩进行排序。注意事项:进行排序的时候要先将其转换为列表来排序,最后转换为字典输出。
2023-12-13 22:06:53
165
原创 Python实现人民币汇率换算
这段python代码主要实现输入人民币任意金额后,输出对应的美元、英镑、欧元、日元金额(保留两位小数)。采用字典的数据结构存储,并且格式化输出。
2023-12-13 22:01:28
2446
原创 数据结构--孩子双亲表示法存储树结构之静态链式存储(C风格的C++)
孩子双亲表示法的主要思想是将每个节点的孩子排列起来看成是一个线性表,且以单链表作为存储结构。首先将元素保存到一个数组里面(结合双亲表示法),然后里面要保存双亲信息,接着就是将每个元素找到它的孩子,将孩子插入到孩子链表中,根据双亲信息找到每个节点的孩子,将孩子节点添加到每个节点的child域,这样就完成了插入工作。接下来是删除,要想删除一个元素,首先要将要删除的元素找到,首先删除数组中的数据,接着要找到该元素的双亲节点,遍历该双亲节点的孩子链表,将孩子链表中的数据删除,并释放内存空间,防止内存泄漏。
2023-12-03 19:00:57
254
1
原创 数据结构(双亲表示法存储树结构)C++
节点的双亲信息存储在数组中,这样通过遍历数组来访问各个节点。树的存储的结构有很多,这次介绍的是双亲表示法存储树结构。
2023-11-30 17:42:41
89
1
原创 数据结构(树的链式存储)C++
这里我主要是将左节点和右节点、根节点的插入分开,分别定义为成员函数,这样方便后续修改代码和查找代码的漏洞,也是为了代码逻辑更加清晰。为了一般性的表示树结构,我们通常要采用链式存储的方法来存储。首先调用该函数的时候就要生成一个新的内存空间,而后将新生成的左右孩子的左右节点赋为空值,将根节点的左节点指向新生成的左孩子的数据域。三个函数都实现完毕后,我们要将它们串起来,联动起来共同实现树结构,这时候我们需要借助一个新的函数来控制它们。这个函数主要是进行错误判断,判断后续生成新节点是否成功分配内存空间。
2023-11-24 21:58:33
111
1
原创 数据结构(树的顺序存储)C++
树的存储结构分为顺序存储和链式存储。顺序存储结构使用一组连续的地址连续的存储单元来存储数据元素,使用顺序存储时,要能反映出节点之间的逻辑关系,要按照一定规律安排数组单元。注意:顺序存储仅仅适合存储完全二叉树或满二叉树,一般的二叉树更适合采用链式存储结构。为了能存储各种数据,这里采用类模版来实现。首先创建一个Tree类。
2023-11-23 18:08:42
109
1
原创 递归解Hanoi问题(C++语言)
这里简述一下Hanoi问题:在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
2023-11-04 18:01:06
97
1
原创 弦截法求高阶方程的近似根(C++语言)
即用弦(直线)代替曲线求方程的近似解,也就是利用对应的弦 与 轴的交点横坐标来作为曲线弧 与 轴的交点横坐标 的近似值。若f(x)在[a,b]上连续,f(a)f(b)<0,则[a,b]称为f(x)的含根区间。其采用的思想是以直代曲,用直线(弦)来逼近曲线求方程的近似解。该方法一般通过计算机编程来实现。曲线弧AB对应的弦AB与x轴的交点。作为曲线弧AB与x轴的交点横坐标的。
2023-11-04 17:54:25
114
1
原创 欧几里得算法求最大公约数(C++递归)
在我们求最大公约数时,我们通常都是枚举的方法一个一个的数去试,然而在编写程序时,这种采用枚举的方法在数特别大的时候,算法的时间复杂度很大,然而欧几里得算法可以在正确求出最大公约数的基础上减小算法的时间复杂度,提高程序运行速度。所谓欧几里得算法,其本质是辗转相除法,如果不明白辗转相除法的小伙伴可以先去百度一下相关定义,接下来呢我们采用递归的方法实现。
2023-11-04 17:41:24
178
1
原创 数据结构(C语言第二版)栈的应用2 括号匹配器
首先创建一个顺序栈,而后将读入的括号保存在栈中,在进行匹配时,每一次都要读取栈顶元素,用num的值来表示读入的左括号和右括号的个数,最终根据num值来判断括号的匹配表现。这一篇文章我来分享一下用栈来做一个括号匹配器。声明:采用的是Clion编译软件。
2023-10-12 20:53:39
175
原创 数据结构(C语言第二版)栈的应用1——数制转换器
下面我们通过一个简单的链栈来实现数制转换的功能。这里采用的原理是:n=(n div m)*d+n mod m。注意:由于Clion的scanf函数问题,这里有一些方便性功能无法实现,只能修改参数。
2023-10-10 21:16:05
140
1
原创 数据结构(C语言第二版)链式队列的创建及基本操作的实现
要创建一个队列,首先要对队列的定义完全掌握,队列是一种受限制的线形表,只能表头出队列,表尾进队列。那么我们在创建队列时,要牢牢把握这一特性,每新增一个元素进队列时,队尾指针都要向后移一位,而队首指针不动指向第一个元素,以此类推。注意:在第一个元素进队列时,队首指针和队尾指针都要指向第一个元素。
2023-10-09 21:18:30
68
1
原创 数据结构(C语言第二版)链栈的创建以及基本操作的实现
下面我们来学习一下链栈的创建和基本操作的实现吧。首先链栈和单链表大致结构相同,大致思路可以采用创建单链表时的思路。单链表的创建详细请看《数据结构(C语言第二版)单链表的创建2》,这里就不详细讲了,接下来我们开始代码实现吧!
2023-10-08 21:18:57
57
2
原创 数据结构(C语言第二版)顺序栈的创建
小伙伴们,你们好鸭!今天我来分享一下顺序栈的创建以及堆栈、弹栈、取栈顶元素操作的具体实现。顺序栈和先前的顺序表类似,下面我们开始吧!说明:小编也是刚学习这门课程,如有错误,请联系小编,小编及时改正。弹栈时,弹出的元素要使top指针向下移动一位。1.创建结构体(定义栈的大小)
2023-10-07 21:57:58
179
1
原创 数据结构(C语言第二版)双链表的创建
在定义结构体节点时新增一个piror指针指向前驱节点,之后在后边更新节点时,除了更新后继节点,还要更新前驱节点。上一篇文章我们创建了单链表,这篇文章我将分享在单链表的基础上改为双链表。
2023-10-06 16:12:52
69
1
原创 数据结构(C语言第二版)单链表的创建2
这次我分享用书本上的逻辑来创建单链表,方便大家学习和理解单链表的创建。说明:小编也是刚学习这门课程,如有错误,请联系小编,小编及时改正。
2023-10-06 15:24:13
73
1
原创 数据结构(C语言第二版)单链表的简单创建
上篇文章讲述了怎么创建顺序表以及基本操作的实现,这篇文章,我来分享一下单链表的创建。说明:小编刚学习这门课程,如有错误,请联系小编,小编及时改正。
2023-10-05 19:37:24
66
原创 数据结构(C语言第二版)顺序表的创建
写在前面的话:不知道有没有小伙伴们和小编一样,刚学习线性表时一头雾水,不知该从何下手,这篇文章,我们将从顺序表开始,理解顺序表的创建、初始化和一些基本操作吧!说明:小编也是刚学习数据结构这门课程,如有错误,请联系小编,小编及时改正。
2023-10-05 15:21:43
174
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人