- 博客(60)
- 收藏
- 关注
原创 【C++深入浅出】STL之string用法详解
从本期开始,我们将进入STL的学习。STL(standard template libaray - 标准模板库)是C++标准库的重要组成部分。其不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。本期我们将要来学习一下STL中的string类,对比一下string和我们之前学习的常量字符串有什么区别。本文的重点在于使用,目标是掌握一些string类的常用接口函数并学会如何使用。之后我们会尝试模拟实现一个string类,理解string的底层实现原理。
2023-11-05 21:56:53 4172 112
原创 【C++深入浅出】模版初识
本期我们要介绍的是C++的又一大重要功能----模版。通过模版,我们可以很轻松的进行泛型编程,大大简化我们编程时的代码。本文的目标是让读者对模版有一定程度上的了解,以便后续STL的学习,对于模版更深层次的内容,我们放到以后再进行拓展。模板是C++泛型编程的基础,在C++中,模板分为函数模板和类模板两大类。
2023-10-29 20:54:40 2226 105
原创 【C++深入浅出】C/C++内存管理(教你如何new到对象)
前面我们学习了有关C++类和对象的知识,学会了如何构建一个完整的类,这些类都是存储在栈空间上的。在C语言中,我们不仅可以在栈上定义变量,也可以对堆上的空间进行管理,在接下来的几期中,我们的目标就是学会C++中是如何进行内存管理的。没有对象的兄弟们都看过来啦,接下来的内容就是教你如何new一个对象出来,学习完本章节内容,保你们人人都有对象,好好看好好学话不多说,开整!!!
2023-10-22 09:18:53 3213 118
原创 【C++深入浅出】类和对象下篇
本期是类和对象篇的最后一期,主要对前两期的知识点进行了补充和拓展。主要讲解了初始化列表、explicit关键字、static成员、友元、内部类以及匿名对象。通过本期和前两期的学习,相信可以让各位读者已经对类和对象有充分的理解。当然,在类和对象这里还有继承和多态两个重要的知识点,我们就放到之后再进行详细讲解。
2023-10-06 20:32:53 848 97
原创 【C++深入浅出】日期类的实现
通过前面两期类和对象的学习,我们已经对C++的类有了一定的了解。本期我们的目标是实现一个完整的日期类,通过实现日期类的构造函数、运算符重载等等内容,加深对前面知识的理解。实现了日期类之后,我们就相当于自己实现了一个网上的日期计算器,如计算几天后的日期,计算日期差。
2023-09-17 08:50:55 1108 119
原创 【C++深入浅出】类和对象中篇(六种默认成员函数、运算符重载)
上期我们介绍了一些关于类的基础知识,学会了如何定义一个类,体会到了面向对象中封装的特征。本期我们将继续类和对象的学习,重点讨论C++类中的成员函数,例如构造函数,析构函数,拷贝构造函数,运算符重载函数,const成员函数等等。
2023-09-10 09:01:19 1170 124
原创 【C++深入浅出】类和对象上篇(类的基础、类的模型以及this指针)
前几期我们介绍了C++相比C语言新增的一些语法,相信大家已经对C++有了一定的认知。而从本期开始,我们将正式进入C++类和对象的学习,感受C++基于面向对象编程的魅力。本期的主要内容是:面向对象与面向过程对比、类的引入及相关语法、类对象的大小和this指针。
2023-09-03 09:33:17 2731 103
原创 【C++深入浅出】初识C++下篇(auto关键字、范围for、nullptr指针)
本期是C++深入浅出的第三期,本文接着上期继续补充介绍C++相比C语言新增的几个语法,主要包括auto关键字,范围for和nullptr空指针。本文是C++初识的最后一篇,通过本文的学习,你将继续感受到C++相比C语言的简便之处,为后面类和对象的学习打下基础。
2023-08-27 10:06:43 1084 108
原创 【C++深入浅出】初识C++中篇(引用、内联函数)
本期是C++深入浅出的第二期,本文接着上期继续补充介绍C++相比C语言新增的语法,主要包括C++引用和内联函数。本文带领读者从汇编的角度深入了解二者的原理及特征,旨在让读者从底层真正理解C++中的引用和内联函数。
2023-08-19 08:59:04 1693 104
原创 【C++深入浅出】初识C++上篇(关键字,命名空间,输入输出,缺省参数,函数重载)
本期是C++深入浅出的第一期,本文首先挪列了C++的63个关键字,然后详细介绍了C++中的命名空间、标准输入输出、缺省参数以及函数重载等一些C++为了补充C语言的不足而新增的功能。通过本文,你可以感受到C++相比较C语言的魅力。本文通过C语言和C++的对比,让读者更好的体会到这些新功能带来的优势及其原理,旨在深入浅出,回归应用
2023-08-12 15:43:23 1552 118
原创 【数据结构】手撕排序NO.2----直接插入排序与希尔排序
本期是排序篇的第二期,我们的主角是插入排序。插入排序分为直接插入排序和希尔排序,后者是对前者的优化。在座的各位或多或少都玩过扑克牌吧!我们在摸扑克牌时,往往会将大牌插到小牌后面,小牌插到大牌前面。当摸完所有的牌后,我们手中的牌自然也就有序了,这实际上就是用到了插入排序的思想
2023-08-01 09:49:56 1785 121
原创 【剑指offer】学习计划day4
本系列是针对Leetcode中剑指offer学习计划的记录与思路讲解。剑指offer-学习计划https://leetcode.cn/study-plan/lcof/?本期是本系列的day4,今天的主题是----》查找算法(简单)题目编号:JZ03:数组中重复的数组,JZ53-I:在排序数组中查找数字,JZ53-II:0~n-1中缺失的数字。
2023-07-21 14:20:01 831 96
原创 【数据结构】手撕排序NO.1----排序初识
排序是数据结构中非常重要的内容,从本期开始,我们会对各种各样的排序算法进行剖析和实现,本期要点是对排序进行一个整体的认识,然后介绍一下两种最简单的排序,最后笼统地介绍一下各大排序算法的复杂度和稳定性。
2023-07-18 18:54:25 1592 95
原创 【数据结构】有关堆你知多少?
本期我们介绍的是大家或许耳熟能详的一种结构----堆。本期通过堆的概念与结构入手,然后讲解堆的向上调整算法和向下调整算法以及分析它们的复杂度,分别使用这两种调整方法建堆进行介绍和对比,最后讲解了有关堆的两个应用:TopK问题和堆排序。本期的每个过程都配有图文解释和完整代码,相信一定能在本篇中收获到有用的知识。
2023-07-14 10:06:14 1949 84
原创 【剑指offer】学习计划day3
本系列是针对Leetcode中剑指offer学习计划的记录与思路讲解。剑指offer-学习计划https://leetcode.cn/study-plan/lcof/?本期是本系列的day3,今天的主题是----》字符串(简单)题目编号:JZ05 替换空格,JZ58 左旋字符串。
2023-07-10 19:12:57 937 62
原创 【数据结构】从树到二叉树
本期我们要学习一种非线性的数据结构------》二叉树想必二叉树这个名字各位或多或少都有听说过,真是久仰大名了。而在学习树之前,我们要先来学习一下树,从对树基本概念的学习逐步过渡到二叉树的学习。本文将从树的概念与性质过渡到二叉树的概念与性质,最后详细讲解有关二叉树的相关接口与操作。废话少说,上菜!!!
2023-07-08 18:59:17 1694 80
原创 【剑指offer】学习计划day2
本系列是针对Leetcode中剑指offer学习计划的记录与思路讲解。剑指offer-学习计划https://leetcode.cn/study-plan/lcof/?本期是本系列的day2,今天的主题是----》链表(简单)题目:JZ06:从尾到头打印链表,JZ24:反转链表,JZ35:复杂链表的复制。
2023-05-14 19:41:03 1172 77
原创 【剑指offer】学习计划day1
本系列是针对Leetcode中剑指offer学习计划的记录与思路讲解。详情查看以下链接:剑指offer-学习计划本期是本系列的day1,话不多说,让我们来看看今天的主题----》栈与队列(简单)题目:JZ09:用两个栈实现队列,JZ30:包含min函数的栈。
2023-04-23 23:36:40 856 91
原创 【刷题篇】栈和队列
各位小友们好久不见,甚是想念!前段时间我们学习了两个重要的数据结构---栈和队列。有效的括号用队列实现栈用栈实现队列注:为了实现方便,本期我们将使用C++来编写代码,利用STL中现有的栈和队列进行实现。
2023-04-16 18:13:17 853 95
原创 【C语言】关于文件操作你知多少?
C语言提供了许多文件读写函数供我们对文件进行操作。我们可以将程序的数据保存在磁盘当中,也可以读取文件的内容到我们的程序中。本文不仅介绍了文件的基本概念和C语言文件操作的方式,还对一些文件操作的细节和易错点进行了详细讨论。感兴趣的小伙伴可以看看,相信一定会有所收获。
2023-04-09 20:16:48 1590 80
原创 【数据结构】带你深度理解队列
与栈同理,队列也是一种限制型的数据结构,不支持随机访问。其只允许在固定的两端进行操作。因此也不存在查找,打印,修改等需要对其他位置进行操作的接口,否则会破坏队列的特性。数据结构的实现方式多种多样,为了在隐藏设计细节的情况下使用方依旧能够很方便的使用,尽管有一些操作仅仅只有一两行代码,我们还是封装成函数作为对外的接口供使用方调用。
2023-04-01 22:37:16 2517 98
原创 【C语言】深度理解指针(下)
💎昨晚整理博客时突然发现指针还少了一篇没写,今天就顺便来补一补。上回书说到,emmm忘记了,没事,我们直接进入本期的内容:本期我们带来了几道指针相关笔试题的解析,还算是相对比较轻松的。话不多说,让我们来看看吧👀【C语言】深度理解指针(上)【C语言】深度理解指针(中)✈做完这8道题目,不得不说,画图真的是一个非常好的解题方法。有些题目,尽管看似十分复杂,当我们把示意图画出来时,问题就迎刃而解,非常直观。因此我们在日常分析题目时要擅于画图。
2023-03-26 23:11:15 2005 77
原创 【C语言】你真的了解结构体吗
我们知道C语言中存在着整形(int、short...),字符型(char),浮点型(float、double)等等内置类型,但是有时候,这些内置类型并不能解决我们的需求,因为我们无法用这些单一的内置类型来描述一些复杂的对象,如一个学生,一本书等等。出于这个原因,C语言还给我们提供了一些自定义的数据类型使我们可以自己来构建类型,如结构体、枚举、联合体。其中最常使用的就是我们本期的主题:结构体。
2023-03-21 13:04:57 4372 91
原创 【C语言】字符串函数和内存函数
🌸在我们编写C程序时,除了使用自定义函数,往往还会使用一些库函数,例如标准输入输出函数字符串函数strlen,内存函数memset等等,使用这些系统自带的库函数可以轻松地帮我们实现预期的功能,大大提升我们编程的效率。1.本期我们将介绍库里面一些常见的字符串函数以及内存函数。2.本期的目标时在学会使用这些库函数的同时了解其内部原理,并学会模拟实现相应的函数。温馨提示:可以使用目录跳转到对应函数以上我们只是将一些常见的字符串函数及内存函数进行列举分析。
2023-03-16 21:10:49 1208 73
原创 【C语言】深度理解指针(中)
✈上回说到,我们学习了一些与指针相关的数据类型,如指针数组,数组指针,函数指针等等,我们还学习了转移表的基本概念,学会了如何利用转移表来实现一个简易计算器。【C语言】深度理解指针(上)本期我们将继续指针的话题,学习有关回调函数的相关内容,以及分析一些与指针相关的常见笔试题。事不宜迟,让我们进入今天的第一个主题----回调函数。首先,回调函数是什么意思呢?👇回调函数就是一个通过函数指针调用的函数。
2023-03-12 21:09:52 1766 76
原创 【数据结构】带你深入理解栈
栈是一种特殊的线性表。其只允许在固定的一端进行插入和删除元素的操作,进行数据的插入和删除的一端称作栈顶,另外一端称作栈底。栈不支持随机访问,栈的数据元素遵循后进先出的原则,即LIFO(Late In First Out)。我们推荐采用顺序表来实现对栈的操作,原因如下:1. 栈的特性完美避开了顺序表尾插尾删效率过低的问题,虽然需要扩容,但是链表创建结点也同样需要成本,而顺序表扩容频率不像链表一样如此频繁。2. 我们知道CPU与主存速度上存在巨大差距,为了提高效率,CPU和主存之间还存在着cache高速缓
2023-03-10 18:17:25 3363 66
原创 【C语言】深度理解指针(上)
🌊谈到指针,想必大家都不陌生。它不仅是C语言的重难点,还是不少C初学者的噩梦。本期我们将深度探讨一些较为复杂的指针以及指针的妙用,带领大家感受指针的魅力😝。首先,我们先来复习复习指针的概念1. 指针就是地址,而指针变量是个变量,用来存放地址(指针),地址标识着一块唯一的内存空间。例如有一张纸,上面写着湖滨东路12号,那湖滨东路12号是什么呢?它就是一个地址,一个指针;而这个地址的载体纸便是指针变量,修改纸上的内容就相当于修改了指针变量存放的内容,即修改了指针。2. 指针的大小是固定的。
2023-03-03 09:55:28 2159 88
原创 【刷题篇】链表(下)
🌸各位读者们好,本期我们来填填之前留下的坑,继续来讲解几道和链表相关的OJ题。但和上期单向链表不一样的是,我们今天的题目主要是于环形链表有关,下面让我们一起看看吧。💻环形链表环形链表II求环形链表环长环形链表💍。
2023-02-21 22:34:40 2832 80
原创 VS实用调试技巧
🐛Bug一词的原意是虫子,而在电脑系统或程序中隐藏着的一些未被发现的缺陷或问题,人们也叫它"bug"。这是为什么呢?这就要追溯到一个程序员与飞蛾的故事了。Bug的创始人格蕾丝·赫柏(Grace Murray Hopper),是一位为美国海军工作的电脑专家,也是最早将人类语言融入到电脑程序的人之一。而代表电脑程序出错的“bug” 这名字,正是由赫柏所取的。1947年9月9日,赫柏对Harvard Mark II设置好17000个继电器进行编程后,技术人员正在进行整机运行时,它突然停止了工作。
2023-02-17 13:31:46 4128 77
原创 【刷题篇】链表(上)
🌈前段时间我们学习了单向链表和双向链表,本期将带来3道与链表相关的OJ题来巩固对链表的理解。话不多说,让我们进入今天的题目吧!🚀反转单链表链表的中间结点合并两个有序链表反转单链表✨。
2023-02-11 10:31:13 2261 67
原创 【刷题篇】顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,是线性表中的一种,分为静态顺序表和动态顺序表。一般情况下采用数组存储,支持元素的随机访问。在数组上完成数据的增删查改。而本期,我们将通过两道在线OJ题来巩固顺序表的基础知识,这两道题分别来自LeetCode 27移除元素和LeetCode 88合并两个有序数组。
2023-02-07 12:51:12 1056 63
原创 【数据结构】动图详解双向链表
带头双向循环链表:其结构是链表8种结构中最复杂的,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。此链表的结点在单向链表的基础上,添加了前驱指针prev指向上一个结点,然后添加了上述所描述的头结点,而循环则是体现在首尾结点相连上。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现起来反而更加简单。通过上面一个个接口的实现,我们发现:虽然双向带头循环链表的结构比起单向链表结构复杂太多,但对于各接口的实现反而变得更加方便,并且某些接口时间效率更高
2023-02-04 18:36:07 1793 71
原创 【数据结构】动图详解单向链表
顺序表中间及头部的插入与删除,需要对原有数据进行移动,时间复杂度为O(N),成本较高使用realloc进行增容时需要申请新空间,释放旧空间,拷贝数据,消耗较高。由于我们无法知道用户实际需要多少空间,在增容时往往可能会有大量的空间剩余。那么这些问题要如何解决呢?通过链表。 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。每当我们需要新增数据时,我们只需申请一个新结点用来保存数据,然后用指针将链表与新结点链接起来即可,并不需要进行数据拷贝。
2023-01-31 19:10:59 2378 58
原创 【数据结构】详解顺序表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,线性表中的一种,一般情况下采用数组存储,支持元素的随机访问。在数组上完成数据的增删查改。顺序表一般可以分为:1. 静态顺序表:使用定长数组存储。使用结构体变量来维护每一张顺序表,结构体的第一个成员是存储顺序表的数组,第二个成员则是存储顺序表内的元素个数。
2023-01-28 23:57:07 670 46
原创 【数据结构】详谈复杂度
我们在做一些算法题时,经常会发现题目会对时间复杂度或者空间复杂度有所要求,如果你不知道什么是复杂度时,你可能就无法正确的完成题目。因此,我们在学习数据结构与算法的第一步,就是要理解什么是复杂度。复杂度是衡量算法效率的标准,而算法分析效率分为两种:时间效率和空间效率。由此,复杂度也被分为两种:时间复杂度和空间复杂度。时间效率被称为时间复杂度, 而空间效率被称作空间复杂度。时间复杂度主要衡量的是一个算法的运行速度。
2023-01-25 18:21:28 2256 52
原创 C语言刷题之摩尔投票法
摩尔投票法又称多数投票法,主要用于解决一个数组中的众数(要求数量超过数组长度的二分之一)的问题。它的原理如下:我们将数组的元素想象成一张张选票,数字代表候选人的序号,每次从数组中取两个元素,如果两个元素相同,则选票数进行累加;如果不相同,则选票进行抵消,直到遍历完整个数组。如果数组中存在符合要求的候选人,则最后剩下的选票一定是最终候选人的序号。(极限一换一规则)
2023-01-18 18:40:44 1751 34
原创 深入理解可变参数列表
在C语言中,对于一般的函数而言,参数列表都是固定的,而且各个参数之间用逗号进行分开。而除了这些函数外,还有些函数的参数列表是不固定的,例如我们常用的printf()函数,会根据我们传入的参数个数来调整最终打印的个数。本期我们会从宏观到微观从如何使用可变参数列表到可变参数列表实现原理来理解可变参数列表。符号及使用说明定义可以访问可变参数部分的变量,实际上是个char*类型使arg指向可变参数部分(通过压栈的特点)通过指针的方式得到参数,int表示每次arg向后读取4个字节。
2023-01-17 12:51:40 1074 24
原创 C语言小游戏---扫雷
本期我们将实现一个9X9格的扫雷游戏,因此我们可以构建两个二维数组,一个数组存储每一格是否有雷,有雷存储字符'1',没雷存储字符'0';而另一个数组则用来打印输出,当排查到时则存储周围雷的数量并打印,当没有被排查时则打印字符'*'以确保雷的隐藏性。由于我们排查时需要计算周围存在雷的数量,如果数组设置为9X9会发生数组越界的问题,为了方便计算,我们将数组设置为11X11的数组以避免数组越界。#define COL 9 //实际列数#define ROW 9 //实际行数。
2023-01-15 22:50:35 1064 12
原创 C语言小游戏---三子棋
我们知道,三子棋的棋盘是一个3X3的棋盘,棋盘上的每个点代表一个棋子。因此我们可以用一个3X3的的二维数组来存储棋盘上每个点的棋子。而棋盘的行数和列数,我们使用宏定义的方式进行实现。除此之外,当游戏出现胜负时,我们需要创建一个变量来表示不同的游戏结果。//棋盘上的棋子//ret=='c' 表示游戏继续//ret=='*' 表示玩家胜利//ret=='#' 表示电脑胜利//ret=='p' 表示游戏平局//打印菜单//初始化数组//打印棋盘//玩家下棋//电脑下棋//判断胜负。
2023-01-14 23:57:32 790 12
原创 C语言之函数栈帧(动图详解)
C程序在调用函数时,会先在栈上给函数预先开辟一个足够的空间,后续函数中的内容,如非静态局部变量,返回值等都会保存在这段空间中。这段空间就叫栈帧。当函数调用时,就会形成栈帧;当函数返回时,栈帧也会被释放。所谓释放,是指将某段空间设置为无效,使得可以被覆盖,而并非清空。本文将采用汇编+动图的角度带大家了解栈帧的形成和释放过程
2023-01-13 19:27:37 4927 23
二叉搜索树的实现与应用
2023-11-04
数据结构-直接插入排序与希尔排序PPT
2023-08-01
数据结构-堆及其应用PPT
2023-07-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人