自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构(六)——红黑树及模拟实现

在前面的文章我们介绍了AVL这一棵完全二叉搜索树,我们分析后发现AVL树查找的时间复杂度是O(logN),说明这是一个很优秀的数据结构,但是在底层实现我们发现,AVL树为了维持它的性质,是需要进行频繁的旋转的,这样会造成不必要的消耗,那么有没有一种数据结构既可保证它的时间复杂度为O(logN),又能避免频繁的旋转呢?这就是我们今天要介绍的红黑树,学习了红黑树之后我们将用红黑树作为底层,去封装实现一个模拟的map和set,下面让我们一起来学习吧。

2025-04-15 17:04:01 683 3

原创 数据结构(五)——AVL树(平衡二叉搜索树)

前面我们在数据结构中介绍了二叉搜索树,其中提到了二叉搜索树的缺陷:极端情况下时间复杂度会坍缩成O(N),如何解决它不够稳定这个问题呢?我们发现,只要让二叉树成为一个满二叉树,就可以很好的控制它在查找的过程中的时间复杂度为O(logN),接下来就让我们一起来学习平衡二叉树当中的AVL树吧。据结构(四)——二叉搜索树的实现(C++版)int _bf;

2025-04-10 20:55:27 850

原创 STL——map和set的介绍

前面我们介绍了二叉搜索树的实现以及key/value模型的模拟实现,基于上述知识点,我们可以引入C++的两个关联式容器:map/set,其中set的底层是key模型,map的底层是key/value模型,有了这两个容器,可以帮助我们解决诸如去重、排序等问题,那么废话不多说,接下来就让我们一起来学习map和set的使用吧。数据结构(四)——二叉搜索树的实现(C++版)二叉搜索树与Key/Value模型。

2025-03-30 12:50:11 715

原创 二叉搜索树与Key/Value模型

前面的文章我们介绍了二叉搜索树的简单实现,对于二叉搜索树而言,它的最大作用是用来查找数据的,那么根据这一特点,我们可以设计一个Key/value模型,这个Key/Value模型就是根据一个值去找另一个值,例如:简单的字典实现、门禁系统、图书管理系统等,那么接下来我们将以二叉搜索树为底层,去介绍Key/value的原理。

2025-03-20 22:02:16 395 1

原创 数据结构(四)——二叉搜索树的实现(C++版)

在我们认识了C++的封装、继承、多态原理以及二叉树的结构后再来学习二叉搜索树的实现会显得比较轻松,同时通过二叉搜索树的实现,我们就了解到了STL库中比较重要的两个容器map/set的底层,这将为我们后面的学习提供一些帮助,接下来就让我们一起来学习二叉搜索树的实现吧。

2025-03-18 14:57:05 1050

原创 C++从入门到入土(八)——多态的原理

在前面的文章中,我们介绍了C++三大特性之一的多态,我们主要介绍了多态的构成条件,但是对于多态的原理我们探讨的是不够深入的,下面这这一篇文章,我们将着重介绍C++多态的实现原理。

2025-03-17 23:06:17 1499

原创 C++从入门到入土(七)——多态

C++一共有三个特性,封装、继承和多态,在前面的文章中,我们分别介绍了封装和继承的概念,现在本篇文章将完成C++特性的最后一块拼图——多态。在实际生活中我们会看到这种情况,一个人有不同的身份,比如在学校的时候是老师,在家是孩子,工作了是老师;我们在买票时,成人全票,儿童半价;动物的叫声,狗是“汪汪”,猫是“喵喵”等这些都是多态的实例,多态通俗将就是一个事物的多种状态,那么有了这个认识,我们将开启多态的世界。1.必须是基类的指针或引用调用虚函数2.被调用的必须是虚函数,并且完成了重写/覆盖。

2025-03-13 20:12:30 741

原创 C++从入门到入土(六)——继承的介绍

本篇博客我们继续来介绍C++的语法及相关概念,今天我们将来介绍继承的概念。在编写代码的过程中我们往往会遇见这种情况,我们实现了两个类,一个是学生,一个是老师,学生类中包含了学生的姓名、性别、年龄、成绩、学号等,老师类中包含了老师的姓名、性别、年龄、教授的学科等,我们发现这两个类的成员有很多重复的地方,如果我们将其分别写在一个类中,那么就会造成代码冗余,C++为我们提供了一个解决方案——继承,我们可以将姓名、性别、年龄等信息写在一个公共类中,然后其余类去复用这个类,然后增加相关的成员函数去完善这个代码。

2025-03-13 17:33:42 888

原创 STL——priority_queue优先级队列的介绍和模拟实现

仿函数实际上是重载了operator()的类,通过重载operator()可以让类的对象像函数一样访问C++提供了一个关键字Comapre,这个关键字就是用来传仿函数的,用户在使用过程中通过传不同的仿函数从而实现不同的功能那么对于优先级队列有什么用处呢?我们查看C++标准库中的定义:我们可以看到,类模板中有三个参数,分别是参数T,适配器以及仿函数,默认的适配器是vector<T>,那么这里的仿函数的功能我们就可以知道是实现大小比较的,用户在使用过程中通过传不同的仿函数可以轻松实现大堆/小堆的建立。

2025-03-06 08:00:00 702

原创 STL——stack与queue的介绍及模拟实现

前面我们介绍了那个库里面的链表以及顺序表两个容器,通过这两个容器作为底层,我们可以去实现一些其他的数据结构,比如说今天我们要介绍的stack和queue,通过一个容器作为底层去封装实现另一个容器,这个过程在C++里面是适配器原理,这也是C++的一种设计模式。接下来的这篇文章,我们将着重介绍容器适配器以及stack和queen的模拟实现。

2025-03-05 11:47:40 804

原创 STL——list的介绍和模拟实现

list的底层是带头双向循环链表,可以在任意位置完成插入删除的功能,了解其迭代器我们将更加深入了解C++封装的特性。与vector相比,list的最大缺陷是不支持随机访问,但由于其底层封装了迭代器,因此list是可以通过迭代器访问的。

2025-03-03 17:51:41 649

原创 STL——vector的代码分析及模拟实现

前面我们介绍了string的模拟实现,本期我们将对vector的使用以及模拟实现进行介绍,vector作为我们接触的第一个标准模板库中的容器有着它独特的特点,通过vector的模拟实现,我们将更加直观地体会到C++的封装特性。string常用接口的模拟实现1.vector是表示可变大小的数组序列容器,就像数组一样,vector也采用连续存储空间来存储元素2.vector使用动态分配数组来存储它的元素,它会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间大。

2024-12-02 16:20:55 879 1

原创 数据结构(三)——双向链表的介绍以及实现

前面两期数据结构的文章我们介绍了顺序表和单向链表,那么本篇博文我们将来了解双向链表,作为最好用的一种链表,双向链表有什么特殊之处呢,接下来就让我们一起了解一下吧。数据结构(一)——顺序表的介绍数据结构(二)——链表的介绍以及单链表的实现目录前言双向链表的概念双向链表的实现1.定义2.双向链表接口定义1.初始化2.销毁4.打印5.尾插/尾删6.头插/头删7.任意位置插入/删除8.查找小结}LTNode;双向链表的定义如上所示,我们发现,在这个结构体内,

2024-12-01 19:24:28 1157

原创 string常用接口的模拟实现

上一篇文章我们介绍了string类中常用接口的使用方法,但是string底层是如何实现这些接口函数的呢?下面我们将开始探讨string类的模拟实现,希望通过本篇文章能够加深您对string类的理解。我们在.h文件中定义好了之后,创建一个string.cpp文件,我们将在这个文件中实现上述定义的接口,需要注意的是:在.cpp文件中要指定类域。分析上述代码,我们为_str开辟了一个新的空间,再将str的值拷贝放进_str中,其中我们多开了一个空间,这是为什么呢?

2024-11-23 17:46:37 778 2

原创 STL——string类常用接口说明

下面是string类的文档对string类的介绍1.string类是表示字符序列的对象2.标准字符串类通过类似于标准字符容器的接口为此类对象提供支持,但添加了专门设计用于处理单字节字符字符串的功能3.string类是 basic_string 类模板的实例化,它使用 char (即字节) 作为其字符类型,具有默认的 char_traits 和分配器类型总之string类就是字符串数组,是表示字符串的字符串类;该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string类的常规操作。

2024-11-23 16:24:33 387 1

原创 C++从入门到入土(五)——再谈构造函数

前面我们通过介绍C++的六个默认成员函数,从而实现了日期类,但对于C++的类和对象而言,还有一些零碎的知识,比如:初始化列表,匿名对象,友元等问题,因此,本篇文章我将从以上几个方面再谈构造函数,由浅入深介绍上述知识点。C++从入门到入土(四)--日期类的实现C++从入门到入土(三)--6个默认成员函数。

2024-09-20 23:46:56 1105 1

原创 C++从入门到入土(四)--日期类的实现

前面我们介绍了C++中类和对象的相关知识和六个默认成员函数,在此基础上我们可以用C++实现一个日期类,这样可以帮助我们更加深入理解C++中的知识点,如果文章中有不懂的可以参考之前的文章C++从入门到入土(三)--6个默认成员函数C++从入门到入土(二)——初步认识类与对象。

2024-08-01 14:17:57 1177

原创 C++从入门到入土(三)--6个默认成员函数

很久没有更新文章了,最近把类和对象相关的知识重新回顾了一遍,打算从今天开始继续更新C++从入门到入土系列。前面我们简单的介绍了类和对象,本期我将继续深入和大家探讨类和对象当中重要的6个默认成员函数,相信看完本篇文章您会对类和对象有更深入的理解,话不多说,我们正式开始。用户没有显示实现,编译器会自动生成的成员函数称为默认成员函数,如果用户显示写了就不会自动生成。一共分为三大类,初始化和清理(构造函数、析构函数),拷贝复制(拷贝构造、赋值重载),取地址重载(普通对象取地址、const对象取地址)。

2024-07-29 01:31:23 974 1

原创 C++从入门到入土(二)——初步认识类与对象

各位佬们,在开始本篇文章的内容之前,我想先向大家道个歉,由于最近学习任务繁重,因此博客更新比较缓慢(实际上是因为我比较懒,哈哈哈)。在上一篇博客,我简单介绍了C++的一些基础知识,而这些基础知识则是为本篇博客打基础的,今天这篇博客则是开始介绍C++的关键部分,类与对象。class+类名+类域。类体中的内容称为类的成员,类中的变量称为类的属性或成员变量,类中的函数称为类的方法或成员函数。类的定义有两种方式,第一种方式是将声明和定义全放在类中;

2024-05-09 18:13:54 1106 2

原创 数据结构(二)——链表的介绍以及单链表的实现

目录前言:顺序表相关问题的思考一、链表的概念二、单链表的实现单链表的插入1.头插2.尾插3.指定位置插入单链表的删除1.头删2.尾删3.指定位置删除访问单链表数据单链表的销毁三、链表的分类欢迎各位铁铁访问本篇博客,小编在这篇博客主要介绍单链表的实现以及链表的分类,可能篇幅较长,但希望您能耐心看完,如果我的博客对您有所帮助的话希望能够点赞关注加收藏,您的支持就是对我创作的最大鼓励。我们在前面是实现了顺序表的数据结构,在介绍链表之前,我想先和大家探讨一下顺序表的优点。由于顺序表在内存当中存储的数据是连续的,因此

2024-04-11 20:34:55 908 2

原创 数据结构(一)——顺序表的介绍

计算机存储和组织数据的方式叫数据结构。指相互之间存在一种或多种特定关系的数据元素的集合。数据结构反应数据的内部构成,即:数据由哪部分构成,以什么方式构成,以及数据元素之间呈现的结构。

2024-04-11 00:56:14 898 2

原创 C++从入门到入土(一)——基础知识的介绍

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题、规模较大的程序,需要高度的抽象和建模时,C语言则不适合。例如:在一个大型项目中,往往会出现变量同名的现象,而这在C语言语法中是不被允许的。为了解决C语言的不足,贝尔实验室的Bjarne Stroustrup博士对C语言语法进行了许多优化,并引入了面向对象的概念,从而发明了一种新的程序设计语言,它在语法上兼容C,为了表达它与C语言的渊源关系,命名为C++。C语言是面向过程的语言,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。

2024-04-10 02:50:48 1011 4

原创 由浅入深带你了解数据结构中的二叉树

事实上,我们在这里采用的是尾部插入,那么此时就存在一个问题,堆是一个有序的数据结构,分为大堆和小堆,那么我们将数据插入堆中时往往会破坏堆的顺序,为了使堆保持原状,我们就要对堆进行调整。层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。首先我们定义一个Heap.h的文件,并在里面定义堆,堆的初始化、销毁、堆的创建、堆的插入、删除、获取堆顶元素等函数接口。

2024-03-30 19:47:32 1159 3

原创 C语言原来是这样实现文件操作的

在开始今天的介绍之前,我想请问大家什么是文件?一般是指磁盘上的文件。从文件的功能来分,分为:程序文件以及数据文件。那么为什么要使用文件呢?我们都知道,我们所写的程序的数据是储存在电脑的内存中的,一旦退出程序,那么程序所开辟的内存则会被回收,数据就会丢失,再次运行我们是看不到上次的数据的。为了解决这个问题,我们要使用文件,完成数据的持久化保存。

2024-01-29 19:12:16 921 1

原创 看完秒懂malloc、calloc、realloc函数的使用

malloc、calloc、realloc函数的使用

2024-01-28 02:23:01 845 3

原创 C语言中非常有用的结构体及其他自定义类型

结构体的介绍,结构体内存对齐,结构体实现位段以及联合体和枚举

2024-01-26 15:54:11 685 2

原创 什么是表达式求值?数据在内存中是怎样存放的?

表达式求值,整型提升,数据在内存中的存放

2024-01-26 03:21:26 706 2

原创 恍然大悟!原来C语言中的字符函数和内存函数是这么用的!!

C语言的字符函数与内存函数的简单介绍

2024-01-23 23:18:11 917 2

原创 深入理解C语言中的指针

在讲内存和地址之前,我们想一个生活案例:假设有一栋没有门牌的房子,你想在这栋房子里找一个东西,由于没有门牌号,你并不知道这个东西在哪个房间,于是就要挨个房间去找,这种查找方式会导致效率低下,但是,如果我们在每个房间编上号,那么你就可以快速找到你想取的房间。计算机中的内存是同理,计算机在CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那么这些内存空间如何高效管理呢?其实就是把内存划分为一个个内存单元,每个内存单元的大小为一个字节。

2024-01-21 15:12:49 1050 5

原创 冒泡排序的介绍以及qsort的底层逻辑

观察Bubble函数我们发现,创建了一个变量flag,那么为什么要创建这样一个变量呢,分析冒泡排序我们知道,冒泡排序是通过遍历数组从而做到将每一个元素进行交换,假如一个数组中的部分元素已经是我们想要的顺序了或者这个数组中的元素已经有序,那么如果没有flag变量,那么函数Bubble仍然会进行遍历数组的过程,从而导致程序低效,为了防止这样的过程发生我们在函数中引入了flag变量作为一个判断条件,如果已经有序,则不会进入程序,在一定程度上提高了程序的效率。size_t size:指向了数组中元素的大小。

2023-11-23 16:56:08 179 1

原创 一个能计算整型数据的计算器

指针是用来存放地址的,那么函数指针数组顾名思义就是“把函数的地址存放到一个数组当中”,那么这个数组就叫函数指针数组,形如:int (*parr[3])()。此代码将函数的地址保存在了数组当中,当我们当我们想要调用某一个函数时就可以通过访问地址找到该函数,为了保证数组下标与菜单中的数字保持一致,将函数指针数组的第一个元素置为空指针NULL。通过这三段代码,我们简单的认识了函数指针数组,以及回调函数,由于作者能力有限,欢迎各位指正。下面,我将介绍什么是函数指针数组。我们在上述代码中引入了。

2023-11-22 21:37:58 248 2

原创 猜数字游戏的实现

还可以加上次数限制,如果五次猜不出来就算失败。

2023-10-24 21:44:27 85 1

原创 C语言的常见概念

注释是对代码的说明,编译器会自动忽略注释,也就是说注释对代码没有影响。C语言的注释有两种方法,第一种方法是/*...*/,将要注释的代码放在其内部,另一种注释是在代码前面加上//比如:当我们在一组字符串后面加上了\n,那么运行框中最后的光标就会移动至下一行,这里的\n的含义就是换行。<3.>转向语句:break语句,goto语句,countinue语句,return语句。好的注释可以帮助我们理解代码,但也不要过度注释,不要写没必要的注释。复合语句就是代码块,成对括号的代码就构成一个代码块,也称为复合语句。

2023-10-23 23:20:49 83

原创 初识C语言

因此,要使用C语言进行编程就要使用编译器,如:msvc\clang\gcc等常见编译器,也有一些集成开发环境,如:VS2022、XCode、CodeBlocks、DEVC++、Clion等,我在这里推荐VS2022,它集成了msvc,免费,使用方便,工作中常见。例如,功能强大的UNIX系统是用C语言编写的的,其他语言的许多编译器和解释器是用C语言编写的,C程序可以用于解决物理学和工程学问题,甚至可以用来制作电影的动画特效。一个系列的库函数一般会声明在同一个头文件中,所以库函数的使用要包含对应的头文件。

2023-10-20 12:58:06 98 1

空空如也

空空如也

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

TA关注的人

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