自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构——受限表之队列

int front;int rear;//定义front代表队头序号,rear代表队尾序号}Queue;int front;int rear;}Queue;Q->front=0;Q->rear=0;return 1;i<=Q->rear;return 1;elseprintf("真满了\n");return 0;if(!return 0;Q->rear+=1;return 1;

2025-09-25 21:00:00 929

原创 数据结构——受限线性表之栈

栈是限定仅在表尾进行插入或删除的线性表。表尾称为栈顶,表头端称为栈底,不含元素的空表称为空栈。设Stack=(a1,a2,……an),a1为栈底元素,an为栈顶元素,元素按照从a1到an的顺序依次进栈,但是退栈的第一个元素是栈顶也即是an。栈的修改按照先进后出、后进先出的原则,因此栈又称为先进后出(FILO)线性表。也就是说,栈是限制插入和删除操作只能在一个位置进行(栈顶)的表。对栈的基本操作包括进栈(push)和出栈(pop)等。int top;}Stack;int top;}Stack。

2025-09-22 21:00:00 457

原创 数据结构——单向循环链表、双向链表以及线性表相关习题盘点

Node;地址 元素 链接地址1014H f现将f存放于1014H处并插入到链表中,若f在逻辑上位于a和e之间,则a、e、f链接地址依次是?根据表格我们可以得出单链表元素顺序:c a e b d,将f插入后,顺序变为:c a f e b d,则 a 链接地址为1014H,f链接地址为1010H,e链接地址为1004H。(注意题目问的时候将e f顺序写反了),因此,应该是:1014H 1004H 1010H.

2025-09-21 21:00:00 974

原创 数据结构——单链表的拓展操作和双指针法在线性表里的应用

以上就是今天给大家分享的线性表进阶知识——双指针和单链表拓展。下面我把目前我们所学的有关单链表操作的所有函数总结到了一起。大家可以浏览一下,有看不懂的可以在前几期博客里找一下解释。}Node;p->data=e;L->next=p;while(p!Node* p=L;return p;p->data=e;return p;Node*p=L;int i=0;p=p->next;i++;

2025-09-20 23:22:44 1597

原创 数据结构——线性表之链表之单链表(知识讲解+完整代码)

1.从空间角度来看,顺序表的优点是对于表中的任何一个元素都没有浪费空间,而单链表会在每个结点附加一个指针。因此,顺序表有更高的空间效率。当线性表元素数目变化较大或者未知时,最好使用链表实现。而如果用户事先知道线性表的大致长度,使用顺序表的空间效率会更高。2.从访问角度来看,如果想得到线性表中第i个元素这样的随机访问,使用顺序表更快。3.在插入和删除操作上,顺序表必须在数组内将后面其余的元素向前或者向后移动,单链表只是对部分结点指针进行了更新,因此,单链表比顺序表效率更高。

2025-09-19 21:47:28 1305

原创 数据结构——线性表之顺序表(知识讲解+完整代码)

摘要:本文介绍了线性结构中的顺序表实现,包括静态和动态两种存储方式。静态顺序表使用固定大小的数组存储,实现了初始化、追加、插入、删除和查找等基本操作;动态顺序表则通过指针动态分配内存,使用时需注意内存管理。两种实现方式都具有O(n)的时间复杂度,顺序表优点在于随机存取方便,但存在插入删除效率低、空间扩展困难等缺点。文章最后指出链式存储结构可以克服这些缺点,为后续介绍链表做铺垫。

2025-09-18 23:17:22 710

原创 一起练习一道看似简单实则非然的西安交通大学往年研究生入学考试编程题

这是西交大往年的研究生考试题目,其实没有很难,如果大家看懂了这个方法,可以再去学一下双指针,解决这道题就很容易了。怎么样,看了这道题,考研成功的信心有没有倍增?继续加油哦!

2025-09-17 18:44:16 367

原创 备考蓝桥杯:用完全背包解决力扣377题

建立一维dp数组,dp[j]代表背包容量为j时装满背包的最大方法数。将二维的递推公式压缩可以得到一维递推公式为dp[j]+=dp[j-nums[i]]。然后是初始化,初始化时是没有物品的,所以只有背包容量为0时可以选择不装物品这一种方法,背包容量为其他数值时都为0种方法。这是一道很典型的完全背包题目,属于排列问题(要考虑顺序),根据我们之前讲的方法,如果我们要用二维dp数组解的话,只能计算组合。本人是新人博主,目前在备考蓝桥杯,学习算法,刷力扣。请注意,顺序不同的序列被视作不同的组合。

2025-09-16 21:30:00 494

原创 备考蓝桥杯:用完全背包解决力扣第518题

该题是求硬币凑成指定金额的组合数,属于完全背包问题。解法采用动态规划:二维数组dp[i][j]表示前i种硬币凑金额j的组合数,递推公式为dp[i][j] = dp[i-1][j] + dp[i][j-coins[i]]。优化为一维数组时,dp[j] += dp[j-coins[i]],必须按"先物品后背包"顺序遍历,以保证结果为组合数而非排列数。初始化时dp[0]=1,其余为0。时间复杂度O(coinsSize×amount),空间复杂度O(amount)。

2025-09-16 08:30:00 1235

原创 0基础也能看懂的汉诺塔问题详解。

本文介绍了汉诺塔问题的递归解法。作者通过分解问题,将移动64个盘子的复杂任务转化为更小规模的子问题:将n-1个盘子借助辅助座移动,再移动最底下的盘子,最后将n-1个盘子移动到目标座。这种递归思想使得问题得以简化。文中提供了C语言实现代码,通过hanotower函数递归处理盘子移动过程,并展示了4个盘子的移动步骤示例。作者指出递归和计算机计算的重要性,使得解决这类复杂问题成为可能。文章最后邀请读者交流算法学习心得。

2025-09-15 16:53:59 661

原创 备考蓝桥杯:用01背包解决力扣第474题

【摘要】本文介绍了力扣474题"一和零"的解题思路。题目要求在给定二进制字符串数组中,找出包含最多m个0和n个1的最大子集长度。文章提出了两种动态规划解法:1)三维DP数组法,将字符串视为物品,0和1数量作为背包容量,子集长度作为价值;2)优化后的二维DP数组法,简化了初始化过程。两种方法都通过预处理计算每个字符串的0和1数量,然后使用动态规划递推公式求解。文章详细说明了状态转移方程、初始化方法及遍历顺序,并强调了二维解法需要倒序遍历背包容量的重要性。最后提供了完整的代码实现和注释。

2025-09-15 08:15:00 1025

原创 备考蓝桥杯:用01背包解决力扣第494题

首先看dp[0][j],如果物品0的重量刚好等于背包重量,那么有一种装满方法,如果物品0的重量小于或者大于背包的重量,没有装满方法,方法为0。其次来看dp[i][0],如果物品0的重量为0,那么dp[0][0]=2(选择正0或者负0),如果物品1的重量也为0,那么dp[1][0]=4(两个正0两个负0排列组合),这一点要尤为注意,因此,这里的初始化是和物品重量是否为0有关的,具体操作大家可以看我的代码。我们建立二维dp数组,dp[i][j]就代表背包容量为j时在前i个物品中选择物品装满背包的所有方法数。

2025-09-14 09:00:00 1182 1

原创 备考蓝桥杯:用01背包解决力扣第1049题

例如[a,b,c,d],不管怎么样两两相减,最终得到的结果始终是一堆之和减去另外一堆之和,比如(a+b)-(c+d)和(a+c)-(b+d)。那也就是说,我们要让两堆的数之和接近总数和的一半。这样的话,背包的最大价值肯定不会超过背包的容量,我们只需要求背包在总数和一半容量时的最大价值就可以了,此时,背包内的数是第一堆,未装进背包的数是第二堆,两堆之差就是最后一块石头的最小重量。组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],组合 2 和 1,得到 1,所以数组转化为 [1,1,1],

2025-09-13 21:00:00 709

原创 备考蓝桥杯:用01背包解决力扣第416题

文章摘要: 力扣416题要求判断一个正整数数组是否能被分割为两个和相等的子集。解题思路转化为01背包问题:将数组总和的一半视为背包容量,数字作为物品(重量=价值)。若背包能恰好装满(最大价值=容量),则存在等和分割。具体步骤:1)计算数组总和,若为奇数直接返回false;2)初始化动态规划数组dp;3)遍历物品和背包容量,更新dp值;4)最终比较dp[sum/2]与sum/2是否相等。示例代码通过一维dp数组实现,时间复杂度优化至O(n×sum)。

2025-09-13 08:30:00 408

原创 备考蓝桥杯:0基础学习完全背包后写的代码(一维滚动数组和二维数组)以及自己的一些思考

本文介绍了完全背包问题的两种解法:二维DP数组和一维滚动数组。完全背包问题要求在给定背包容量和多个物品(每个物品可无限使用)的情况下,选择物品组合使总价值最大化。二维解法通过双重循环比较装入/不装入当前物品的价值,一维解法则通过顺序更新数组实现空间优化。关键区别在于完全背包需顺序遍历(允许重复选取),而01背包需逆序遍历。文章包含完整代码实现和详细注释,适合算法初学者理解动态规划在背包问题中的应用。

2025-09-12 08:30:00 381

原创 一起练习一道比较简单的ACM试题

接下来的N行每行包括两个26进制数x和y,它们之间用空格隔开,每个数的位数最多为10位,我们可以保证相加的结果的位数最多也是10位。每个数会用小A所设计的操作系统中的表示方法来表示,如:bsadfasdf。以往的操作系统内部的数据表示都是二进制方式,小A新写了一个操作系统,系统内部的数据表示为26进制,其中0-25分别由a-z表示。现在小A要在这个操作系统上实现一个计算器,这个计算器要能实现26进制数的加法运算。你能帮小A实现这个计算器吗?输出x和y相加后的结果,结果也要用题目中描述的26进制数来表示。

2025-09-11 12:00:00 390

原创 备考蓝桥杯:0基础学习01背包后写的代码(一维滚动数组版)以及自己的一些思考

一维滚动dp数组解01背包问题确实比二维数组代码更简单,但是只有在完全理解二维数组的原理后才能正确应用一维滚动数组。另外,还需要注意一些细小的问题,例如数组含义、初始化、遍历顺序等等。大家可以参考我的笔记和代码注释。

2025-09-10 16:56:17 298

原创 备考蓝桥杯:0基础学习01背包后写的代码以及自己的一些思考

本文介绍了01背包问题的动态规划解法。01背包问题要求在给定背包容量和物品重量、价值的情况下,选择装入物品使总价值最大化。解法使用二维数组dp[i][j]表示前i个物品在容量j时的最大价值,通过比较放入和不放入当前物品的两种情况进行状态转移。文章包含完整的C++实现代码,详细解释了初始化过程和状态转移方程,并提供了示例输入输出。该解法时间复杂度为O(NW),空间复杂度为O(NW),适用于物品数量和背包容量不超过1000的情况。作者还分享了学习过程中的心得和调试经验。

2025-09-09 22:48:34 663

空空如也

空空如也

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

TA关注的人

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