自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STL中栈的实现

首先就是添加一个属于栈容器头文件,只要有了它就可以直接使用STL中封装好的std::stack类,这样简直爽死,不用写那大串的代码,就可以直接使用,这就是C++相比C语言的魅力所在吧。这个模板类里面自带了一些函数,包括push,pop,top,empty.然后就可以直接使用对应的函数啦,在栈名后面加"."然后直接调用就好啦。

2025-12-01 15:53:07 64

原创 链表实现栈:具体函数实现

然后是入栈,函数返回值为void,像插入一样,无需返回值,然后就是带<T>的作用域,作为类模板的成员函数实现,参数列表为T类型的元素,代表待插入的元素,然后函数内部实现,我们采用头插法,将插入元素作为新的头节点,就如同插入位置为0一样,首先定义一个结构体指针指向一个新的结构体的内存空间,内存空间的作用域初始化为element,然后让这个新的节点指向头节点,然后将这个新的节点置为头节点,同时让链表长度加一。

2025-12-01 15:25:58 212

原创 链表实现栈:栈的类的声明

然后是类的具体实现,首先是私有权限的量,首先定义了一个结构体,命名为Node,然后结构体有两个成员变量,作为链表节点的数据域和指针域,然后是用初始化列表来初始化链表的节点。除了这个节点的结构体以外,还有链表的头节点和链表的长度。相比之前链表的实现,节点放在了类的里面,这样看起来就更加饱满啦。首先构造函数利用初始化列表初始化链表的成员变量,然后依次是析构函数,入栈函数,弹出函数,栈顶函数以及获取栈长度的函数声明。

2025-12-01 15:00:40 46

原创 顺序表实现栈:具体函数实现

然后是函数实现,首先定义一个新的内存大小,置为原本内存的两倍,然后定义一个T类型的指针,指向新申请的T类型的数组,然后数组的大小是新内存,紧接着用一个for循环,将旧数组中的值传给新数组,然后删除旧指针指向的旧数组,然后让这个旧指针指向新的数组,然后将新的内存大小赋值给旧的内存变量。首先是模板声明,然后函数声明,作用域加上<T>,作为类模板的成员函数实现,然后给类名前面加上~,作为析构函数,然后函数内部,我们直接删除这个顺序表。然后咱们让栈的长度减1,然后返回size对应索引位置的元素。

2025-12-01 12:21:42 146

原创 The Encounter of 我 and C++

因为当时有C的部分基础,所以我是从上述代码开始的,老师带我写了几行,我当时就感觉这个C++跟C的区别并不是很大,后来了解到C++是C语言的母集,看着如此简单的代码,我不禁沾沾自喜,谁知这还只是这门语言冰山一角中的一角。在我创建这个优快云账号的时候,我立志要成为世界顶尖的程序员,如果说未来会有一道又一道关卡的话,C++将成为我最得力的武器和帮手,帮助我登上程序员的高峰。我明年要用C++来打竞赛,然后找一些简单的实习工作,然后到大三的时候,我将利用C++的相关逻辑来做项目,提升我的能力和水平。

2025-11-28 21:32:53 1134 1

原创 顺序表实现栈:栈的类的声明

经过这段时间的学习,咱们也是终于学到了栈这一部分,在这里,我们将继续沿用前面学习顺序表和链表的方法,来学习栈的相关知识。

2025-11-28 17:19:39 289

原创 单向链表反思题1

今天我开始意识到自己的一些问题在学数据结构期间,是这样的,由于数据结构与语言基础部分大不相同,所以学习方法和节奏也大相径庭,在基础部分,我习惯照搬老师的思路和模板来快速理解每一部分的知识,类似于嫁接,但是当我用这种方法来学数据结构时,我感到无力和乏味,因为数据结构相比基础部分来说,更加灵活,要求也更高,相比之下,以前想的是不需要理解太仔细太认真,只要会用就好了,忘记哪里就再温习一遍,但是数据结构部分却要求咱们逐字逐句地进行理解和灵活运用,并结合画图理解,所以说我今天总结了一些自己在学习数据结构部分的方法:1

2025-11-26 21:50:35 245

原创 单向链表--------练习11题解----递归相关

这个题目真的困扰了我好多好多天呢,因为刚开始学递归的关系,这个题目我仅看出需要使用递归,但是再往后嘛,不会进行别的变化和变通了,于是我参考了老师的解法,最终形成了自己的做法,首先定义一个函数,负责将所有节点实现翻倍操作,然后除头节点以外所有节点实现进位操作,(这一步我在参考老师做法之前也是可以实现的,并且一直卡在这里),然后咱们跳出这个函数,回到我们原本的函数,利用动态申请虚拟头节点实现对原头节点的进位操作,这样就完美了。

2025-11-25 11:37:18 267

原创 单向链表--------练习10题解

这个题目是用的递归的方法,之前老师讲过,一个题目可不可以用递归的方法,首先要满足递归的三个条件。2.子问题求解方式和大问题一样,比如这个题目不管是求解子问题还是求解大问题都是通过判断该节点与后续节点之间大小来判断这个节点是否删除;这个判断语句帮助我们判断当前头节点与其后继节点的大小关系,如果头节点更大则返回头节点作为上一个节点的后继节点,否则返回后继节点。3.存在最小的子问题,比如这个的最小子问题就是看最后一个节点是否需要删除,由于其后续没有节点,所以保留。

2025-11-23 12:26:47 136

原创 单向链表--------反转链表--------递归和迭代

这里我们运用迭代的方法,定义一个curr指针暂存头节点,然后定义curr的前驱节点和后继节点,利用这三个节点,实现链表的逆序,就是让每个节点的指针域反转。其一定义三个指针,让curr的前驱节点指向NULL;其二利用while循环,首先利用next暂存curr的后继节点,然后让curr的后继节点置为pro,紧接着让pro指向curr对应地址,再让curr指向next对应地址,循环往复,节点就逆转了。这里注意,当节点指针域改变以后,就不能利用Node->next来偏移指针了,这也是定义后继节点的目的。

2025-11-19 11:58:47 272

原创 单向链表--------练习8题解

这个解法让我对于链表的理解更上一层楼,借助数组筛选重复元素,借助双指针重排链表,首先这个题目呢,我们处理链表长度为0的情况,当长度为0,我们则直接返回头节点的指针,如若不讨论,后续当我们使用双指针的时候,会使用到头节点的后继,而空的头节点是没有后继的,所以会报错;然后定义两个指针,分别指向头节点和头节点的后继;再然后定义一个数组,存储链表中出现的值,这里数组作为;然后使头节点数据域的值在数组中标记出来;

2025-11-18 19:25:56 202

原创 string类型变量

输入输出输入输出。

2025-11-18 19:25:29 255

原创 单向链表--------练习7题解

这个题目的思路就是首先利用快慢指针找到待删除的节点,然后利用前驱节点pro删除该节点,然后用判断语句处理删除头节点的情况,最终返回头节点。

2025-11-18 15:16:58 168

原创 单向链表--------练习6题解

我的做法是首先根据循环确定头节点的位置,然后将头节点赋值给一个结构体指针,然后新定义一个结构体指针暂存头节点,利用while 循环来删除链表中符合条件的元素,也就是利用双指针。

2025-11-17 21:47:00 259

原创 单向链表--------练习5题解

这个题目的解法就类似于曲线救国,它没有删除当前节点,而是复制一份后继节点的值,然后删除后继节点。具体思路就是,首先把后继节点的值赋值给当前节点,然后当前节点指向后继节点的后继节点。我原本的思路是,直接让前置节点指向后继节点,但发现仅靠next办不到,所以老师给出的方法我没有想到,算是换位思考吧。

2025-11-17 21:08:43 117

原创 单向链表--------练习4题解

这里利用的是快慢指针,然后快指针走两步,慢指针走一步,然后两个判断语句代表两种判断中间节点的情况。

2025-11-16 17:25:18 173

原创 单向链表--------练习3题解

这个题目我依然做的很狼狈,新定义了一个函数来求链表长度,然后在函数中利用for循环来求对应节点的值。

2025-11-16 12:26:01 213

原创 二进制与十进制互转

1.首先数位逆转,然后从第一位开始,第一位乘以2的0次方,第二位乘以2的1次方,以此类推,将这每一个乘积相加,就是对应十进制的数的值。2.首先数位逆转,然后让每一位与2的0次,1次,2次幂对齐,然后将1对应数位的数相加,就是对应十进制的数字。

2025-11-16 11:46:21 141

原创 单向链表--------练习2题解

我刚刚学习完单向链表,但是进入到力扣的这个题目里面还是有点懵的,因为这个类里面没有成员变量的链表长度和头节点,然后头节点是以参数的形式传入成员函数的,这让我手足无措,最终建立了一个函数求size才勉强成功,另外对于二进制到十进制的转换的理解也不太通透,也算是狼狈不堪啦。

2025-11-16 11:25:35 274

原创 单向链表--------练习1

这个题目是一个非常典型的题目,不过我是第一次遇到,楼梯问题就是斐波那契数列。斐波那契数列,又称,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)我的理解就是从第三项开始,每一项的值等于前面两项的和,比如:1,1,2,3,5,8...

2025-11-16 10:49:38 159

原创 链表中出现的问题

这个是类里面的初始化列表,两个参数一个是头节点,一个是链表长度,暂时不需要从外部输入来确定他们的值,所以初始化为NULL和0,而且调用时为默认构造函数,则第一个小括号中就不用写东西啦。这个是结构体里面的初始化列表,由于每个节点都有数据域和指针域两个部分,所以初始化时包含这两个参数的初始化,而输入端输入的是数据域的值,所以类型也跟data保持一致。linkedList():head(NULL),size(0){}//这里由于实例化对象调用的是默认构造函数,所以第一个小括号里面不应该有参数。

2025-11-14 19:13:19 190

原创 牛客周赛Round117--------题解2

这个题目是要求我们从n个数中找到一个中心点,中心点是与另外n-1个点都有联系的点,而有趣的是,输入语句第一行是n,也就是元素的个数,后面会跟和n-1行,每一行代表两个数之间建立的联系,看似非常复杂的题目就在这一刻开始变得异常简单,本以为菊花的形状是这样:但其实却是这样:这样一看,思路就跃然纸上了,虽然还是要照例输入这n-1行语句,但是实际判断中心点,只需要判断前两行就可以了,因为这n-1行每一行都会出现中心点和另一个一般点,所以只要在前两行里面找到重复出现的那个点就好了。

2025-11-13 21:48:03 272

原创 牛客周赛round117--------题解1

作为第一道的签到题,没有任何的难度,关键在于审题和对题目的理解,不要搞混,越是简单的题目越要在纸上写清楚思路再作答。踩的坑:对四个名词的概念混淆,导致未通过。考察知识点:判断,对题目的理解。可以优化的地方:无。

2025-11-13 21:33:13 141

原创 链表8--------修改和调试

首先是修改函数的返回值类型,函数名,参数列表,删除不需要返回值,所以为void,然后函数名为update代表更新、修改,添加LinkedList::作用域方便调用类内成员变量,参数列表的两个参数分别是待修改的位置和修改后的元素。这个修改函数的实现居然调用了索引函数,倒是蛮便捷的,通过索引函数直接取得目标索引的节点,然后利用箭头直接调用节点的数据域,将修改后的元素直接赋值给这个数据域。调试函数这个名字不太好理解,我觉得看函数名打印比较贴切,返回值为void,同样加入作用域,

2025-11-13 21:13:46 309

原创 链表7--------查找2:给数传值

这一行是索引函数的返回值类型、函数名和参数列表,返回值类型是结构体指针,因为要返回相应的节点,函数名是get,代表得到某个节点,加入LinkedList::方便调用类内的成员变量,参数列表代表得到节点的索引。首先利用curr暂存头节点,然后通过for遍历链表,直到curr指向目标位置,最终返回curr。优先判断异常输入,由于传入的是索引值。

2025-11-13 20:58:47 206

原创 链表6--------查找1:给值传数

然后是利用while循环来遍历整个链表,条件是curr不等于NULL以及curr节点的数据域不等于目标查找元素,第一种情况是,这个链表中没有我们要找的元素,于是curr就一直偏移最终指向了NULL,这个时候我们终止循环,最终会返回NULL,另一种情况是如果遍历遇到了那个元素,就终止循环,此时curr恰好指向待查找的元素。首先返回类型是结构体指针类型,因为要返回的是单个节点。然后find代表找某个元素的位置,然后参数列表是待查找的元素。//如果遍历到最后没有找到对应值,那就返回空值。

2025-11-12 21:01:13 287

原创 链表5--------删除

如果删除元素不是第一个元素,那就先用结构体指针curr暂存头节点,然后利用for循环遍历链表,遍历到curr指向待删除位置的前驱节点,然后声明结构体指针temp暂存待删除结点,然后将curr的后继节点置为temp的后继节点,然后释放temp指向的也就是待删除元素对应的内存空间。首先是返回值类型,由于删除不需要返回什么东西,所以是void,然后它要调用类内的成员变量,就加入了作用域,LinkedList:: 然后remove代表删除,参数列表有一个元素是删除元素的索引位。函数体内部首先是判断输入是否异常。

2025-11-12 19:35:46 301

原创 链表4--------插入

/定义游标节点 这里游标节点就是后续遍历链表的时候用的,首先暂存头节点,因为要从头节点开始遍历,然后利用for循环,每次使curr指针偏移,逐渐指向后面的节点,最终停在待插入位置前面的节点,然后<1>让新节点的后继指向与curr指向节点后继指向相同的地址,也就是指向插入位置原本的节点,然后<2>让curr的后继指向新的节点地址,即让插入位置前面的节点指向新插入的节点:这里不好理解,咱们。这个赋值语句其实是将newNode指向的新节点的地址赋值给head,即让head这个指针指向这个新节点的地址。

2025-11-12 09:55:06 858

原创 链表3--------析构函数

这个while循环是用来遍历链表的,循环终止的条件是curr这个指针不会指向空,我们来看一下这个循环遍历链表的逻辑,首先利用temp指针暂存头节点,然后使curr置为curr的后继节点,也就是此时curr指向链表的第二个节点,最后,释放tmp指向的存放头节点的内存空间。如此循环往复,随着curr指向不断偏移,链表中的内存空间就都被释放了。这是一个写在类外面的析构函数,所以加入了作用域,也就是类名+::,然后是~加上构造函数名称(),然后就是函数体内部的具体实现啦。

2025-11-12 09:08:06 235

原创 链表2--------单向链表类:增删改查

首先是两个私有权限的成员变量,ListNode*是结构体指针类型,负责指向节点以及调用节点中的参数,初始时指向链表的头节点,所以变量名为head。查:即给数还值操作和给值还数操作,find函数就是给值还数,即传入一个元素,返回它在链表中对应元素的索引,get函数就是给数传值,即传入一个索引,返回链表中索引对应的元素。这个类就相当于这个单向链表的总控系统,负责链表的增删改查部分,封装链表的管理逻辑和操作方法。增:即插入操作,insert函数要传入两个参数,即插入位置的索引和插入元素的值。

2025-11-11 10:18:01 275

原创 链表1--------链表节点的实现

这一行代码的作用就是利用宏定义定义数据的类型,这样方便后续的代码中的数据与其他量混淆,增强可读性。

2025-11-11 09:51:25 248

原创 牛客周赛11.9--------小红的好矩形题解

最近一直在准备小魔丸的生日礼物,今天要多问一下朋友的意见,不要自己盲目去挑,这样她是不会喜欢的。

2025-11-10 21:31:38 317

原创 顺序表vector--------练习题9题解

今日天气晴朗,是一个值得睡觉的软绵绵的星期天,所以我今天起晚了一点,伴随着学习的进步,一些生活上的事情也随时间出现啦,妈妈的生日快到了,小魔丸的生日也快到了,我要着手开始准备生日礼物啦,一年两年前的我也许会慌不择路,现在的我也算是气定神闲啦,但也没有那么迎刃有余,所以要多问问朋友的建议,这样比较保险。精心准备的礼物不仅能让对方觉得受到关心和重视,而且可以留下美好的回忆,对于我来说也可以积攒经验,也算是一桩美事啦。

2025-11-09 13:52:27 200

原创 顺序表vector--------练习题8题解

今天去了一家有故事的猫咖,里面的猫猫狗狗来自我们本地的一个流浪猫狗收容所,在他们的留言墙上我看到了那个慈祥的大姨,她是这些猫猫狗狗的妈妈,她心中又有什么样的信仰和信念支撑和驱动着她去不知劳累的干这些事情呢。

2025-11-08 21:28:36 273

原创 顺序表vector--------练习题7题解

可以优化的地方:现在这个解法的时间复杂度是O(n^2),空间复杂度是O(1).对时间进一步优化的话,可以采用。从这个思路中我可以学习到,左和+mid+右和就等于总和,所以无需单独计算,只需要一个for循环来判断大小就好了。2.踩的坑:每次循环的总和numl,numr没有放在循环里面进行刷新;1.考察知识点:顺序表vector,双指针。

2025-11-07 18:37:03 273

原创 顺序表vector--------杨辉三角

今天给你们分享一件非常令人开心的事情,我在学校有了一个妹妹,傻乎乎的,还爱哭,整天不洗头,脏兮兮的,但是她人单纯随和,天真可爱,她总能给我一种安心的感觉,这一定是我这半年来最开心的事情了。话不多说,今天要分享的题目是杨辉三角,真是一道经典且酣畅淋漓的编程题呢。由于太过经典,可参考以下网址--------。

2025-11-06 21:56:30 392

原创 牛客周赛--------C题解

这个题目的意思就是给定好几个两两相离的区间,然后再跟定一些数字进行询问,而每次询问时都要返回给定的这一个数字在哪一个区间,如若不属于任何区间则返回-1.

2025-11-05 21:36:42 110

原创 二分查找。。。。。。

1.必须是数组(顺序表);2.必须有序。

2025-11-05 15:58:12 177

原创 顺序表vector--------练习题6题解

2.踩的坑:一开始用的是原地算法,结果条件直接用的是nums.size(),这导致在插入的过程中,这个值一直在变大,使得循环无法结束;另外,由于这个题目对于时间复杂度的限制并不是很苛刻,所以优先考虑运行时间的话,新建一个新的数组比较好,原因在于。本题目就是将给定的数组拷贝一份,两份连接起来,形成一个新的数组并返回。1.考察知识点:vector顺序表、顺序表的插入。不过,有原地算法和创建新数组两种。3.可以优化的地方:无。

2025-11-05 15:44:59 175

原创 vector原地扩容的“拷贝开销”和新数组直接填充

原地算法中vector原地扩容,它的每一次插入,都会引起数组的扩容,每次扩容都会消耗时间,而如果是创建一个新的数组,它会提前根据你会输入的数的数量,提前扩容到相应的大小,所以仅需要扩容一次,时间上比原地扩容节省很多时间。

2025-11-05 15:44:24 106

空空如也

空空如也

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

TA关注的人

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