自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++必备知识--模板

在学习了函数重载之后,我们了解了不同参数的同名函数是可以构成重载的,这种方式便利了调用类型不同但功能相同的函数,使得我们编写代码更加得心应手,但是也会让我们做很多重复的工作,导致代码冗余。那么如何实现一个各种类型通用的函数呢,这就需要了解泛型编程的基础概念,我们以交换函数为例:针对这些问题,我们C++的祖师爷 Bjarne Stroustrup 创造了模板。如果在C++中能够存在一种模具,通过给模具填充不同的类型就能获得对应具体类型的代码,那将会节省大量重复不必要的工作。

2024-08-07 17:18:01 569

原创 C++必备知识--内存管理

C++的必备知识 - - - 内存管理

2024-08-06 15:38:25 720

原创 C++必备知识--类和对象

class是类的关键字,Stack是类的名字(自己定义的),在{}中定义类的主体。C++中类的出现是为了替代C语言中的结构体,所以类的结构与结构体类似,{}之后需要加分号。类体中的内容称为类的成员,类中(声明)的变量称为类的属性或成员变量,类中的函数称为类的方法或成员函数。在C++中也兼容了C语言中结构体的用法,并将 struct 升级成了类,也就是说C++中的 struct 内也可以定义函数,但是一般情况下我们还是优先使用class。除此之外,定义在类里的成员函数默认是inline内联函数。

2024-07-30 14:43:24 851

原创 C++入门基础

• 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。• namespace本质上是定义出了一个域,这个域跟全局域各自独立,不同域可以定义同名变量,所以上面的rand不在冲突了。• C++中的域分为函数局部域、全局域、命名空间域和类域;域影响的是编译时语法查找的一个变量/函数/类型出处(声明或定义)的逻辑,所以有了域隔离,名字冲突就解决了。

2024-07-23 15:50:20 1030

原创 MATLAB的基础知识

1. 在每行语句后面加上英文分号表示不在显示运行结果。a = 3;a = 52. 多行注释快捷键,CTRL+R。3. 取消多行注释,CTRL+T。4. 清空工作区的所有变量使用clear。5. 清空命令行窗口的所有变量使用clc。6. clc和clear一起使用,起到初始化的作用,防止之前的结果对新脚本文件(后缀名为.m的文件)产生干扰。

2024-07-20 09:33:23 905

原创 数据结构--排序

1.元素集合接近有序,直接插入排序算法的时间效率越高。2.时间复杂度:O(N^2)3.空间复杂度:O(1)。4.稳定性:稳定。

2024-07-18 16:31:49 1068 1

原创 数据结构--二叉树(二)

链式二叉树是链式树集合中的一种,该树的每个根节点最多只有两个孩子节点,我们一般用左右孩子来称呼,在初学链式二叉树时,由于大家对链式二叉树的结构掌握还不够深入,为了降低本章的学习难度及成本,我们先手动创建一棵简易二叉树,快速进入二叉树的操作学习中,等所有基本操作大家都掌握后,我们再来了解如何创建链式二叉树。构建的二叉树结构如图;我们先来回顾一下二叉树的概念,二叉树是:1. 空树。2. 非空:根结点,根结点的左子树、根结点的右子树组成的。

2024-06-08 15:50:52 1092

原创 数据结构--二叉树

一棵二叉树是节点的一个有限集合,该集合或者为空或者由根节点加上两棵别称为左子树和柚子树的二叉树组成。从图中可以看出:1、二叉树不存在度大于2的节点。2、二叉树的子树有左右之分,次序不可颠倒,因此二叉树为有序树。

2024-06-01 11:57:49 898

原创 数据结构--树

在本节开始之前我们先来了解一下在树的学习中,我们需要了解哪些概念。叶节点或终端节点:度为0的节点称为叶节点;如上图:B、C、H、I...等结点为叶结点。。双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的双亲节点;如上图:A是B的父结点。孩子节点或子节点:一个节点含有子树的根节点称为该节点的子节点;如上图:B是A的孩子结点。树的高度或深度:树中节点的最大层次;如上图:树的高度为4。非终端结点或分支结点:度不为0的结点;如上图:D、E、F、G...等结点为分支结点。

2024-05-27 21:08:19 652

原创 数据结构--栈和队列

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据的插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作被称为进栈/压栈/入栈,入数据的地方为栈顶、出栈:栈的删除操作叫做出栈。出数据也在栈顶。出栈、入栈的过程我们可以想象为我们往羽毛球筒里放羽毛球和拿羽毛球,都是只能在一个口进出,是不是可以很形象的想象出来。下面我们来看一看栈是如何实现的。

2024-05-22 14:28:12 978

原创 数据结构--顺序表和链表的区别

顺序表和链表之间各有优劣,我们不能以偏概全,所以我们在使用时要关注任务的注重点,以此来确定我们要使用两者中的哪一个。

2024-05-10 20:13:19 394 1

原创 数据结构--链表进阶面试题

的输入如下(你设计的程序。

2024-05-04 15:01:27 885

原创 数据结构--单链表OJ题

给你单链表的头节点head,请你反转链表,并返回反转后的链表。解:这道题有递归和迭代两种反转链表的方式。如果是迭代的话,我们需要使用的是三指针法。首先保证链表不为空,然后创建三个指针(n1、n2、n3),开始时将n1赋值为NULL,n2赋值为head,n3赋值为head->next。随后进行链表遍历,先让n2->next = n1,然后n1 = n2、n2=n3、当n3!= NULL时,n3也向后移动一个节点,即n3 = n3->next。在循环结束后,n1就是我们新的头结点。

2024-05-02 16:27:00 790

原创 数据结构--顺序表经典OJ题

给你两个按排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你nums2到nums1中,使合并后的数组同样按排列。最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初始长度为m + n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长度为n。设计实现一个时间复杂度为O(m + n)的算法解决此问题.解:对于这道题来说我们有多种思路,但是在限制了时间复杂度后,三变量就是最好的方法。

2024-05-02 15:33:12 561

原创 数据结构--算法的复杂度

这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。但是这种方法有很大的缺陷:1、必须依据算法事先编制好程序,这通常需要花费大量的时间和精力。如果编制出来发现它根本是很糟糕的算法,不是竹篮打水一场空吗?2、时间的比较依赖计算机硬件和软件等环境因素,有时会掩盖算法本身的优劣。3、算法的测试数据设计困难,并且程序的运行时间往往还与测试数据的规模有很大关系,效率高的算法在小的测试数据面前往往得不到体现。

2024-05-02 10:32:49 193

原创 数据结构中的算法

什么是算法呢?算法是描述解决问题的方法。算法(Algorithm)这个单词最早出现在波斯数学家阿勒·花刺子密在公园825年(相当于我们中国的唐朝时期)所写的《印度数字算数》中。如今普遍认可的对算法的定义是:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。现实世界中的问题千奇百怪,算法当然也就千变万化,没有通用的算法可以解决所有问题。甚至解决一个小问题,很优秀的算法却不一定适合它。指令能被人或机器等计算装置执行。

2024-05-01 17:23:57 1286

原创 C语言实战项目--贪吃蛇

windows是一个多作业系统,除了协调应用程序的执行、分配内存、管理资源之外,它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程序达到开启视窗、描绘图性、使用周边设备等目的,由于这些函数的服务对象是应用程序(Application),所以便称之为Application Programming Interface,简称API函数。Win32 API也就是Microsoft Windows32位平台的应用程序编程接口。

2024-04-30 21:27:22 1830

原创 python--列表

列表的定义列表的定义。

2024-04-28 19:33:17 413

原创 数据结构--双向链表

这里单独讲解一个点,我们在创建“哨兵位”的时候使用的参数是一级指针的地址,并用二级指针接收,目的是创建一个节点的地址用作节点的链表头部,之后的其他函数均使用一级指针是为了防止头节点被修改。三个种类可以任意搭配,所以总共可以形成八种链表,但是最常用的是单向不带头不循环链表和双向带头循环链表。带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这⾥“放哨的”。注意:这⾥的“带头”跟前⾯我们说的“头节点”是两个概念,实际前⾯的在单链表阶段称呼不严。文件:DoubleListNode.h。

2024-04-21 13:27:16 346

原创 数据结构--单链表

火车的车厢是独立存在的,且每节车厢都有车门,假设每节车厢的车门都被锁上了,并且需要不同的钥匙开锁,而每次只能携带一把钥匙,我们该如何从车头走到车尾呢?链表中每个节点都是独⽴申请的(即需要插⼊数据时才去申请⼀块节点的空间),我们需要通过指针变量来保存下⼀个节点位置才能从当前节点找到下⼀个节点,因此我们需要指针变量来保存下⼀个节点的位置。当我们想要保存⼀个整型数据时,实际是向操作系统申请了⼀块内存,这个内存不仅要保存整型数据,也需要保存下⼀个节点的地址(当下⼀个节点为空时保存的地址为空)。

2024-04-17 20:30:03 417

原创 Python - 字符串的应用

print(len(s)) #len用来计算字符串长度#用_把上面的人的名字连起来。

2024-04-17 20:12:10 732

原创 Python - 基础知识

语法:a = 10 #意思是创建一个a变量,把10存放到a变量中。#这里说明一下,#在Python中是是注释符print(a) #print是打印函数变量是一个可以发生改变的量,变量是用来区分不同数据的,可以指向一个内存空间,帮我们存储一些数据。

2024-04-08 20:18:41 889

原创 数据结构-- 基于顺序表的通讯录代码讲解

我们了解顺序表之后来一个比较简单的小项目来巩固一下.每一个函数我都进行了详细的补充, 各位可以仔细阅读。我将整个项目分为了Contact.h 、Contact.c和test.c三个文件中,其中Contact.h用于函数声明和结构体创建,Contact.c用于函数的实现,test.c用于测试代码。

2024-04-07 19:10:12 161

原创 基于C语言的数据结构--顺序表讲解及代码函数实现展示

数据结构是由“数据”和“结构”两个词组合而来,自然要以两个词分别去阐述。首先,什么是数据?数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。数据可以是连续的值,比如声音、图像,称为模拟数据;也可以是离散的,如符号、文字,称为数字数据。在计算机系统中,数据以二进制信息单元0、1的形式表示。什么是结构?

2024-04-05 12:07:16 680

原创 C语言:预处理详解

C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。__FILE__//进⾏编译的源⽂件__LINE__//⽂件当前的⾏号__DATE__//⽂件被编译的⽇期__TIME__//⽂件被编译的时间__STDC__//如果编译器遵循ANSI C,其值为1,否则未定义举个栗子:printf基本语法:definename stuff#define reg register //为 register这个关键字,创建⼀个简短的名字;

2024-03-31 15:41:57 793

原创 C语言:编译和链接

在ANSI C的任意一种实现中,都存在两个不同的环境。第一种是翻译环境,在这个环境中源代码被转换为可执行的机器指令(二进制指令)。第二种是执行环境,它用于实际执行代码。

2024-03-27 21:28:27 894

原创 C语言:文件操作解析

文件名在本文的开篇,我们要探讨为什么要使用文件?我们写的程序的数据是存储在电脑的内存中的,没有文件,如果程序退出,内存收回,数据就会丢失,等再次运行程序的时候,上次程序中的数据就找不到了。如果想要将数据进行持久化的保存,我们就需要使用文件。那到底什么是文件呢?我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows环境后缀为.exe)。

2024-03-26 19:15:41 951

原创 动态内存管理

在本章之前,我们见过以及掌握的所有内存开辟方式都是静态的。比如://在栈空间上开辟四个字节。//在栈空间上开辟10个字节的连续空间。这些空间开辟的大小都是固定的。并且数组在声明的时候必须指定数组的长度,数组空间一旦确定了,那么它的大小就不能再改变。但是有时候我们对空间的需求是逐渐增长的,静态开辟空间是很难满足我们对空间的需求的。因此在C语言中引入了动态开辟内存的方法,让程序员自己可以申请和释放空间,就比较灵活了。

2024-03-23 12:00:20 892

原创 C语言中的联合和枚举

像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共⽤体。因为所有变量公用同一片区域,所以给联合体其中⼀个成员赋值,其他成员的值也跟着变化。

2024-03-20 20:36:15 471

原创 C语言结构体详解

结构体是一些值的集合,这些值被称为成员变量。结构体中的每个成员可以是不同类型的变量。语法:structtag //关键词 标签member-list;//成员清单}variable-list;//变量清单通过结构体,我们可以方便的定义一个复杂对象。

2024-03-20 19:05:05 740

原创 内存中的数据存储

整数在内存中的存储在前面说过整数的2进制表示方法有三种,即 原码、反码和补码。三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最⾼位的⼀位是被当做符号位,剩余的都是数值位。注意事项:正整数的原、反、补码都相同。负整数的三种表⽰⽅法各不相同。原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。补码:反码+1就得到补码。对于整形来说,数据是以补码的方式存储在内存中。

2024-03-15 20:16:02 770

原创 C语言中内存函数的使用

函数使用说明:•函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。•这个函数在遇到'\0'的时候并不会停下来。•如果source和destination有任何的重叠,复制的结果都是未定义的。

2024-03-14 19:28:05 420

原创 C语言:ctype和string库中的常用函数的应用和实现

字符分类函数在编程过程中,我们经常要处理字符和字符串,C语言标准库中就提供了一系列的库函数,便于我们操作库函数。字符分类函数C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。这些函数的使⽤都需要包含⼀个头⽂件是ctype.h这些函数的使⽤⽅法⾮常类似,我们一一个函数为例,各位理解后可以去类比使用:islower 是一个能够判断参数部分的 形参是否是⼩写字⺟的函数。通过返回值来说明是否是⼩写字⺟,如果是⼩写字⺟就返回⾮0的整数,如果不是⼩写字⺟,则返回 0。

2024-03-10 15:39:33 1150

原创 C语言指针(5):strlen与sizeof的区别及指针笔试题练习

1、sizeof和strlen的对比1、sizeof和strlen的对比。

2024-03-06 20:26:21 1006

原创 C语言指针(4):函数在指针中的进阶应用

回调函数就是⼀个通过函数指针调⽤的函数。函数参数的形式为函数指针类型。当你把函数/函数的地址作为参数传递给相应函数是,如果这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用的,而是再特定的条件或输入操作下有另外的一方调用的,用于对该操作或条件的相应。综上:回调函数同样可以使代码更加简洁,这样的好处都是函数指针的应用所带来的。

2024-03-03 11:01:46 862

原创 C语言指针(3)

在指针的类型中我们知道有⼀种指针类型为字符指针char*;代码 const char* pstr = "hello bit.";特别容易让人以为是把字符串hello bit 放到字符指针pstr⾥了,但是本质是把字符串hello bit.⾸字符的地址放到了pstr中。

2024-02-27 20:31:43 841

原创 C语言指针(2)

我们以上面代码为例,通过结果我们可以发现其实数组名本来就是地址,⽽且是数组⾸元素的地址。如果arr是数组⾸元素的地址,那输出应该的应该是4/8才对。其实数组名就是数组⾸元素(第⼀个元素)的地址是对的,但是有两个例外:•sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩,单位是字节。•&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的)除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。

2024-02-19 11:14:55 745

原创 C语言指针(1)

在我们住过的学校宿舍楼里,每个房间都有一个编号,而正因为有了这个编号,我们就可以高效的找到正确的房间;如果房间没有编号,再去寻找某个房间,就得挨个房⼦去找,这样效率会很低。在计算机上,我们也运用了相同的原理:我们知道计算上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数 据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何⾼效的管理呢?其实也是把内存划分为⼀个个的内存单元,每个内存单元的⼤⼩取1个字节。

2024-02-18 11:23:31 847

原创 C语言操作符练习

曾经有一道面试题,要求不能创建临时变量(第三个变量),实现两个数的交换。这道题如果没有前半句的修饰,就只是简单的一道基础题。但是如果加上了前半句的修饰,就需要更换思路了。第二种方法比第一种方法更考验思维,但是中方法也有弊端,如果a和b两个数无限接近计算机能够储存的最大值,那结果将不再准确。这就是我想讲述的重点:^ 按位异或操作符,二进制位相同为0,相异为1.技巧1:a ^ 0 = a;技巧2:a ^ a = 0;

2024-02-16 10:01:01 1136 1

原创 C语言操作符详解

/代码1:变量的定义int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//代码2:初始化。struct Stu //类型声明//名字int age;//年龄//初始化//指定顺序初始化//代码3int data;//结构体嵌套初始化//结构体嵌套初始化。

2024-02-08 10:41:12 913

空空如也

空空如也

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

TA关注的人

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