自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】几个基本容器的模拟实现(string,vector,list,stack,queue,priority_queue)

【代码】【C++】几个基本容器的模拟实现(string,vector,list,stack,queue,priority_queue)

2024-11-18 23:27:39 349

原创 【C++】string的模拟实现

因为在自己写string类的时候没有涉及到模板,所以就分成两个文件去实现。(由于太多,这里只挑选常用的接口)

2024-10-28 17:08:56 430

原创 【C++】string的使用

在C++98中一共提供了7个接口。在substring接口中,参数len的缺省值是npos。那么npos是什么意思呢?参考文档,我们可以知道npos是size_t的最大值。npos是一个静态成员常量值,对于 size_t 类型的元素具有最大可能的值。当此值用作字符串成员函数中 len (或 sublen) 参数的值时,表示"直到字符串的未尾”。作为返回值,它通常用于指示没有匹配项。

2024-10-26 15:58:26 865 1

原创 【C++】初识模板

在学习模板之前,是如何实现一个通用的交换函数呢?使用函数重载虽然可以实现,但是有一下几个不好的地方:1.重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数2.代码的可维护性比较低,个出错可能所有的重载均出错那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。

2024-10-23 00:08:49 443

原创 【C++】内存管理

int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间//还会调用它们的默认构造函数free(p1);delete p2;在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。new的原理a.调用operator new函数申请空间。

2024-10-22 23:06:03 592

原创 【C++】日期类的实现

日期类是我们C++学习类和对象的一个很好的练习实例,它可以帮助我们更好的理解和掌握类和对象的内容,日期类中实现了日期类的构造,析构,拷贝构造以及日期大小的比较,日期加减天数等一系列功能。

2024-10-19 17:19:54 406 1

原创 【C++】类和对象(下)

1.之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表,初始化列表的使用方式是以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。2.每个成员变量在初始化列表中只能出现一次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地方。3.引用成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进行初始化,否则会编译报错。

2024-10-18 23:08:34 879

原创 【C语言】指针数组和数组指针

在我们学习指针的时候,题目中的概念经常会让我们在理解的过程中焦头烂额,这篇文章将详细的指出这几种关于指针概念的差异。

2024-10-18 21:49:34 1640 1

原创 【C++】类和对象(类的默认成员函数)

默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下编译器会默认生成以下6个。

2024-10-16 17:36:02 1226

原创 【C++】类与对象1

一. 类的定义一. 类的定义1.类定义格式a.class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。b.为了区分成员变量,一般习惯上成员变量会加一个特殊标识,如成员变量前面或者后面加_ 或者 m开头,注意C++中这个并不是强制的,只是一些惯例,具体看公司的要求。

2024-10-13 21:12:41 965

原创 【C++】C++的引用

不论采取何种定义,在使用空值的指针时,都不可避免的会遇到⼀些麻烦,本想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,调用了f(int x),因此与程序的初衷相悖。inline适⽤于频繁调用的短小函数,对于递归函数,代码相对多⼀些的函数,加上inline也会被编译器忽略。这样的写法同样也是错误的,在运行第二条语句的时候由于类型不同,会进行隐式类型转换,而转换的时候同样也会将转换的结构保存在一个临时的对象之中,所以又会造成权限在引用时出现权限放大的问题。

2024-10-12 11:30:14 972 1

原创 【C++】静态数据成员和静态成员函数

4.静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成员变量不属于某个对象,不走构造函数初始化列表。2.静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象中,存放在静态区。1.静态成员函数中可以访问其他的静态成员,但是不能访问非静态的,因为没有this指针。使用static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针。2.非静态的成员函数,可以访问任意的静态成员变量和静态成员函数。根据静态数据成员和静态成员函数我们可以写一段用来。

2024-10-09 23:30:19 366

原创 【数据结构】二叉树的链式结构

一.二叉树的遍历学习二叉树结构,最简单的方式就是遍历。所谓二叉树遍历(Traversal)是按照某种特定的规则,依次对二叉 树中的节点进行相应的操作,并且每个节点只操作一次。访问结点所做的操作依赖于具体的应用问题。遍历 是二叉树上最重要的运算之一,也是二叉树上进行其它运算的基础。为了使遍历更加的形象,在这里我们先受搓一颗二叉树来说明二叉树的遍历。注意:上述代码并不是创建二叉树的方式再看二叉树基本操作前,再回顾下二叉树的概念,二叉树是:1. 空树。

2024-05-29 19:08:29 1058 29

原创 【数据结构】二叉树的顺序结构及实现

一.二叉树的顺序结构普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。二.堆的概念及结构堆的性质:1.堆中某个节点的值总是不大于或不小于其父节点的值;2.堆总是一棵完全二叉树。三.堆的实现。

2024-05-20 10:39:02 3748 57

原创 【数据结构】二叉树的概念

一.树概念及结构1.树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限节点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。注意:树形结构中,子树之间不能有交集,否则就不是树形结构。2.树的相关概念节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I...等节点为叶节点非终端节点或分支节点:度不为0的节点; 如上图:D、E、F、G

2024-05-16 22:03:44 922 33

原创 【数据结构】栈和队列OJ面试题

当我们pop数据的时候,需要先将创建好的st1中的数据依次出栈到st2的栈中,然后将st2中的栈顶数据pop掉 ,最后将st2中的数据重新导回到st1中。其他的接口用之前实现栈的接口就可以基本解决了。关于用队列实现栈,我们的思路是这样的,首先,创建出两个队列,一个队列用来在出栈时拷贝,一个队列用来在出栈时接受拷贝,所以这就要求一个队列必须是空的,而另一个队列的功能就是扮演栈的角色(因为队列出入数据是先进先出的,栈出入数据是先进后出的,所以在数据出栈的时候,只能用队列的拷贝来实现栈的数据出栈)。

2024-05-14 00:36:08 1145 45

原创 【数据结构】栈和队列

一.栈。

2024-05-12 00:29:51 409 26

原创 【数据结构】顺序表与链表的差异

在说明这两个问题之前。缓存基本上来说就是把后面的数据加载到离自己近的地方,对于CPU来说,它是不会一个字节一个字节的加载的,因为这非常没有效率,一般来说都是要一块一块的加载的,对于这样的一块一块的数据单位,术语叫“Cache Line”,同时,因为对于CPU来说,它一般来说都是要一块一块的加载的,也就代表着加载的时候会将顺序表连带着后面的数据一并加载到cache上面,也就节省了时间,节约了空间,提高了程序的运行效率。同时,因为有大量的无用的数据加载到缓存,会造成数据的污染,影响程序的性能。

2024-05-11 18:43:32 2257 33

原创 【数据结构】链表经典OJ题目练习(2)

思路:先分别计算出两个链表的长度,算出它们长度之间的差值deference,再让长度较长的链表先走deference步,这样两个链表的长度就会相等,再进行遍历链表,找出相交点(注意,在寻找相交点的时候要找节点的地址,不能找节点的val值)。假设slow进入环的时候slow与fast节点的距离为N,fast节点每次走两步,slow节点每次走一步,所以每当slow节点走一步的时候,快慢指针之间的距离就会缩小1,直到它们之间的距离变为0.思路:首先找到快慢指针相遇的节点,此时,meet节点就是slow指针。

2024-05-07 22:49:36 1390 39

原创 【数据结构】算法的效率(时间复杂度和空间复杂度)

一.算法的效率算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏,一般是从和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计 算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。二.时间复杂度。

2024-04-29 18:33:09 1524 31

原创 【C语言】贪吃蛇

贪吃蛇。

2024-04-27 22:18:53 2819 21

原创 【数据结构】链表经典算法OJ题目练习

思路2:创建新链表,遍历原链表,若pcur节点的值小于x,则头插在新链表中;思路1:在原链表上进行修改,若pcur节点的值小于x,往后走;若pcur节点的值大于或等于x,尾插在原链表后,删除旧节点。思路1:创建一个新链表,将list1和list2中节点的值分别比较后尾插到新链表。思路1:变量一遍链表,返回节点count,再直接返回count/2个节点。思路1:创建新链表,将原链表中的节点拿过来进行头插。思路3:创建大链表和小链表,并将两个链表连接起来。思路1:遍历原链表,将val链表释放掉。

2024-04-24 21:23:47 671 13

原创 【数据结构】双向链表

1.双向链表的结构我们观察双向链表的结构可以发现一个节点不仅可以指向后一个节点,同时也可以指向前一个节点。这里的head跟在之前的单链表中我们说的“头节点”是两个概念,实际在之前的在单链表阶段称呼不严谨,但是为了让我们更好的理解就直接称为单链表的头节点。带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这里放哨的。“哨兵位”存在的意义: 遍历循环链表避免死循环。2.双向链表的实现。

2024-04-19 16:59:18 544 8

原创 【数据结构】单链表

关于链表,我们引入一些关于顺序表的问题:1. 中间/头部的插⼊删除,时间复杂度为O(N)2. 增容需要申请新空间,拷⻉数据,释放旧空间。会有不⼩的消耗。3. 增容⼀般是呈2倍的增⻓,势必会有⼀定的空间浪费。例如当前容量为100,满了以后增容到 200,我们再继续插⼊了5个数据,后⾯没有数据插⼊了,那么就浪费了95个数据空间。为了解决这些问题,我们引入了链表以解决以上问题。1.链表的概念及结构。

2024-04-14 22:37:52 679 4

原创 【数据结构】通讯录项目

通讯录是基于顺序表而展开的一个项目,有增加联系人,删除联系人,修改联系人,查找联系人,展示联系人等一系列功能。关于顺序表的知识,可以观看。Contact.c文件:.

2024-04-10 00:33:09 224 5

原创 【数据结构】顺序表

顺序表是线性表的一种,线性表是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使 ⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。案例:蔬菜分为绿叶类、⽠类、菌菇类。线性表指的是具有部分相同特性的⼀类数据结构的集合。顺序表和数组的区别:顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接⼝。

2024-04-08 19:16:32 196 2

原创 【C语言】文件操作

1. 为什么使用文件?1. 为什么使用文件?如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失 了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤ ⽂件。2. 什么是文件?磁盘(硬盘)上的⽂件是⽂件。在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。1.程序文件程序文件包括源程序⽂件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows 环境后缀为.exe)。2.数据文件。

2024-04-07 21:14:06 914

原创 【C语言】atoi函数的使用和模拟实现

观察运行结果,发现如果使用atoi函数打印出来的数字大于INT_MAX,或者小于INT_MIN,结果会直接输出INT_MAX或者INT_MIN。观察运行结构,发现在字符串当中遇到非数字的字符会直接停止打印,将非数字的字符前面的数字打印出来。观察运行结果,发现在字符串中间遇到空格的话,会直接停止打印,同时将空格前面的数字打印出来。4.使用atoi函数打印出来的数字大于INT_MAX,或者小于INT_MIN。观察运行结果,字符串是跳过开头的空格直接将数字打印出来的。3.在字符串当中遇到非数字的字符。

2024-03-31 17:52:21 357 2

原创 【C语言】动态内存管理

在这个数组中我们可以看到在使用malloc函数开辟了一块空间之后,可以设置柔性数组的长度,同时我们还可以使用realloc函数改变柔性数组的长度,最后一个数组的长度是可以随意改变的,因此,它被称为柔性数组。有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的时 候内存,我们一定会对内存的大小做灵活的调整。但是对于空间的需求,不仅仅是上述的情况。3.包含柔性数组成员的结构⽤malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。

2024-03-30 20:23:54 585 1

原创 【C语言】结构体类型(下)联合和枚举

一.联合一.联合。

2024-03-29 23:29:06 818 2

原创 【C语言】自定义类型(上)结构体

结构体定义:结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。结构体变量的创建和初始化匿名结构体类型匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使⽤⼀次。结构的⾃引⽤。

2024-03-26 17:12:35 817 1

原创 【C语言】函数栈帧的创建与销毁

lea是加载有效地址的意思,也就是将[ebp-24h](也就是main函数预开辟的空间与ebx之间的地址)的地址加载到edi中,在将9的值赋给ecx,在将cccccccc的值赋给eax,最后一段的作用是将与开辟的main函数的空间初始化全部初始化为cccccccc的值,一共初始化9个dword长度(一个word是两个字节,dword就是四个字节),而cccccccc这样的值其实就是一个随机值。第三步叫做sub,意思是减,所以esp就会减去0E4h,意味着esp的值会变小,esp就会指向上面的某一个位置。

2024-03-24 19:57:03 715 1

原创 【C语言】整数和浮点数在内存中的存储

整数的2进制表⽰⽅法有三种,即原码、反码和补码 三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最 ⾼位的⼀位是被当做符号位,剩余的都是数值位。正整数的原、反、补码都相同。负整数的三种表⽰⽅法各不相同。原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。补码:反码+1就得到补码。在计算机系统中,数值⼀律⽤补码来表⽰和存储。原因在于,使⽤补码,可以将符号位和数值域统⼀处理;

2024-03-22 00:02:52 1034 1

原创 【C语言】字符函数,字符串函数和内存函数

在不同的系统和C语⾔标准库的实现中都规定了⼀些错误码,⼀般是放在 errno.h 这个头⽂件中说明的,C语⾔程序启动的时候就会使⽤⼀个全⾯的变量errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会讲对应的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是有对应的错误信息的。C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的。否则为假,返回值为0。

2024-03-19 17:26:37 704 1

原创 【C语言】3种strlen函数的模拟实现

1. strlen是库函数,使⽤需要包含头⽂件 string.h。我们可以在官网上查询一下strlen函数:2. srtlen是求字符串⻓度的,统计的是 \0 之前字符的个数。

2024-03-12 19:14:08 307 1

原创 【C语言】8步实现扫雷游戏

你有过小时候在学校的计算机课总会偷偷打开电脑上的单机游戏“扫雷”,然后一玩就是一节课的经历吗?那么在学过C语言之后我们有没有办法自己做出一个“扫雷”游戏呢?答案是肯定的,接下来,教你用8步很容易得创造一个扫雷游戏。

2023-12-12 11:31:18 1053

原创 【C语言】3步实现猜数字游戏

首先要出现一个选择页面,输入1.play或者0.exit选择进入游戏或者退出游戏,如果选择1.play的话进入游戏,跳入游戏阶段,开始输入你要猜的数字,如果猜的数字大了,则显示“猜大了”,相反则显示“猜小了”,然后开始输入下一个要猜的数字。srand函数⽤来初始化随机数的⽣成器的,程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数来设置rand函数⽣成随机数的时候的“种子”,只要“种子”变化,每次⽣成的随机数序列也就变化起来了。:游戏的通道,控制游戏的进入和退出。

2023-12-07 09:15:41 526 1

空空如也

空空如也

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

TA关注的人

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