自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【无标题】

红黑树是一种特殊的二叉查找树,它的每个节点都有一个颜色属性(红色或黑色)。这种数据结构由两位计算机科学家Leland和Tarjan于1978年发明,主要用于提高二叉查找树的操作效率。

2024-04-07 21:43:11 408

原创 AVL树总结与博客

AVL树,又称为自平衡二叉查找树或高度平衡二叉树,是一种自我平衡的二叉搜索树。在AVL树中,任何节点的两个子树的高度差最多为1,这就确保了AVL树的平衡性,使得其查找、插入和删除操作的时间复杂度均为O(log n),其中n是树中节点的数量。AVL树是数据结构中一种非常精巧的设计,它通过严格的平衡机制来保证高效的查找、插入和删除操作。理解并掌握AVL树的旋转操作是学习AVL树的关键部分,希望这篇总结和图解能帮助你更好地理解和应用AVL树。

2024-03-26 21:47:08 325

原创 类和对象(上)

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。char*_sex;int* _age;

2024-03-09 09:46:58 798

原创 文件描述符和缓冲区

文件描述符是一个整数,用于抽象地表示应用程序与文件或其他输入/输出资源之间的关联。在Linux中,一切皆文件,包括常规数据文件、设备驱动、套接字等。每当程序打开一个文件或创建一个新资源时,内核都会返回一个文件描述符,该描述符可被用来进行进一步的操作,如读、写、关闭等。0 - 标准输入(stdin)1 - 标准输出(stdout)2 - 标准错误(stderr)文件描述符和缓冲区在Linux系统中起着重要的作用。通过文件描述符,进程可以对文件进行读写操作;而缓冲区则可以提高文件读写性能。

2024-02-17 11:08:14 853

原创 虚函数:多态性的实现者

在面向对象编程(OOP)的世界中,虚函数是实现多态性的关键工具。它们允许我们通过基类接口来处理不同类型的对象,使得我们可以编写出更加通用和灵活的代码。今天,我们将深入探讨C++中的虚函数,了解它们的工作原理以及如何使用它们来增强程序的设计。

2024-02-13 10:45:23 368 1

原创 继承与多态

在面向对象编程(OOP)的世界中,继承和多态是两个至关重要的概念。它们不仅增强了代码的复用性,还提供了一种优雅的方式来处理程序中不同类型对象的行为。今天,我们将深入探讨C++中的继承和多态,看看它们如何协同工作来创建强大、灵活且易于维护的程序。

2024-02-12 20:26:53 900

原创 reverse_iterator实现及理解

在C++标准库中,reverse_iterator是一种迭代器适配器,它允许用户以相反的顺序遍历容器。本文将详细介绍reverse_iterator的实现原理和使用方法。

2024-01-25 15:50:55 355

原创 vector的特性及使用

vector是C++中非常强大的工具,它提供了许多方便的特性,使得处理动态数据变得简单。理解和掌握vector的使用,将使你的编程工作更加高效。

2024-01-23 09:37:40 394

原创 进程地址空间

进程地址空间是一个虚拟的概念,是虚拟地址/线性地址,全都不是物理地址。它表示了进程中的代码、数据和其他资源在内存中的分布情况。每个进程都有一个独立的地址空间,这意味着不同的进程之间不会相互干扰。进程地址空间可以分为以下几个部分:文本段(Text Segment):存储程序的指令部分。数据段(Data Segment):存储程序的全局变量和静态变量。BSS段(Block Started by Symbol):存储程序的未初始化数据。堆(Heap):存储程序运行时动态分配的内存。

2024-01-19 15:13:08 412

原创 C++的String类

在C++中,String类是一个非常重要的类,它用于处理字符串。在本文中,我们将深入探讨C++的String类,包括其特性、用法以及一些常见的问题和解决方案。

2023-11-25 19:01:03 44

原创 Linux中的Make,Makefile与进度条

在Linux环境中,make、Makefile和进度条是程序员必备的工具和技能。通过掌握这些知识,程序员可以更高效地进行项目开发,提高生产力。希望本文能对你有所帮助!

2023-11-10 11:36:50 375

原创 C++中的类和对象

类的定义以关键字class开始,后跟类名和一对花括号{}。类名通常采用驼峰命名法,首字母大写。类的成员变量和成员函数分别放在类定义的花括号内。public:// 成员变量// 成员函数// 函数体C++中的类和对象提供了一种强大的编程范式,使得我们能够更好地组织和管理代码。通过使用类和对象,我们可以实现面向对象编程,提高代码的可重用性和模块化。

2023-10-22 16:20:45 48 1

原创 插入\希尔\选择\归并\冒泡\快速\堆排序实现

它的基本原理是将待排序的数组构建成一个大顶堆(或小顶堆),然后将堆顶元素与堆尾元素交换,将剩余的元素重新调整为大顶堆(或小顶堆),重复这个过程,直到堆中只剩下一个元素。它的基本思想是将待排序的数组按照一定的间隔分组,对每组进行插入排序,然后逐渐缩小间隔,直到间隔为1,此时整个数组已经基本有序,再进行一次插入排序即可。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从前向后扫描,找到相邻两个未排序元素中较大的一个,将其与未排序元素交换位置。当数据量较大时,其性能优于其他排序算法。

2023-10-06 17:07:53 83 1

原创 Linux操作系统中的粘滞位

在Linux操作系统中,粘滞位(Sticky Bit)是一种权限属性,它可以为特定目录设置,用于限制其他用户在该目录下的操作。如果当前用户没有足够的权限,并且粘滞位被设置,那么该用户将无法对目录下的文件进行修改。一旦一个目录被设置了粘滞位属性,只有文件所有者、目录所有者和超级用户才能对该目录下的文件进行修改。通常情况下,粘滞位可以被设置在/tmp目录下,这是因为/tmp目录往往是用于让所有用户共享的临时存储空间。在共享文件服务器上的共享目录中设置粘滞位,可以阻止非目录所有者的用户对文件进行修改。

2023-07-18 09:05:52 275 1

原创 map和set的应用总结

map和set是C++ STL库中非常有用的数据结构。它们可以帮助我们处理复杂的数据结构问题,例如存储和查询关键字、删除重复项、计算词频等等。在实际编程中使用map和set也非常普遍。掌握它们的使用方法,有助于提高代码的质量、可读性和可维护性。

2023-05-05 17:14:44 93

原创 C++实现二叉搜索树

二叉搜索树(Binary Search Tree,简称BST)是一种数据结构,是一棵二叉树,其每个节点都具有以下性质:左子树中所有节点的值均小于其父节点的值;右子树中所有节点的值均大于其父节点的值。因此,它可以快速地找到一个节点或一组节点。在C++中,我们可以通过定义一个二叉搜索树类来实现这个数据结构。

2023-04-15 09:53:01 41

原创 C++的虚函数

C++中的虚函数是在基类中声明的函数,它可以在派生类中被重写。当基类的指针或引用指向派生类对象时,调用虚函数时将根据实际对象类型来决定使用哪个函数。这种行为被称为"动态绑定"。

2023-04-15 09:32:41 169

原创 c++的继承

继承可以理解为一种从一个已有的类派生出新的类的机制,派生的新类被称为子类或派生类,而被派生的原有类被称为基类或父类。在这种继承方式中,基类的公有成员也会成为子类的公有成员,基类的保护成员也会成为子类的保护成员,而基类的私有成员是不能被子类访问的。在这种继承方式中,基类的公有成员和保护成员都会成为子类的保护成员,而基类的私有成员是不能被子类访问的。C++允许多个基类以逗号分隔的方式出现在子类的继承列表中。在这种继承方式中,基类中的所有成员都会成为子类的私有成员,不管它们是公有的、保护的还是私有的。

2023-04-15 09:16:03 21

原创 list、vector迭代器失效问题

list是一个链表结构,它是有一个个单独的结点组成,插入或者删除不会出现空间开辟放大的问题。迭代器it依然指向那个位置,迭代器不会失效,但会返回插入结点的迭代器。但erase()会使it的迭代器失效,毕竟那个结点都被释放了。因此在删除数据结点时,返回下一个结点的迭代器。,迭代器++或者–就可以控制迭代器的移动,插入时可能会发生扩容,而一旦扩容,迭代器就会失效。(迭代器it依然指向之前空间的位置,但那片空间已经被释放,所以迭代器变成。数组是一段连续的空间,迭代器是内置类型的。与数组相比,list的迭代器。

2023-03-20 20:03:39 103

原创 c/c++的内联函数

添加 inline 关键字,在。

2023-03-20 19:48:38 29

原创 数据内存分布

内存在程序编译的时候已经分配好,这块内存在程序的整个运行期间都存在。例如:全局变量,static变量。栈又叫堆栈,用来存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等,栈是向下增长的。在执行函数时,函数内局部变量的存储单元可以在栈上创建,函数执行结束时,这些内存单元会自动被释放。全局区分为已初始化全局区(data)和未初始化全局区(bss)。用来存储程序运行时分配的变量,堆是可以上增长的。程序结束后由系统释放。申请任意多少的内存,程序员自己负责在何时用。存放常量字符串,程序结束后由系统释放。

2023-03-20 15:08:03 73

原创 构造函数初始化列表

标题文本样式列表图片链接目录代码片表格注脚注释自定义列表LaTeX 数学公式插入甘特图插入UML图插入Mermaid流程图插入Flowchart流程图插入类图快捷键。由上面的特殊类成员必须放在初始化列表可知:这些特殊的类成员肯定是在初始化列表里定义的,事实上,在C++中规定其他成员也是在初始化列表里定义的。因为初始化只能初始化一次,而构造函数体内可以多次赋值。构造函数初始化列表以一个冒号开始,接着是以逗号分隔的成员列表。最为重要的是,下列这些特殊的类成员,第一种初始化是常见的赋值操作。

2023-03-20 14:06:29 116

原创 二叉树的实现

如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树。如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树。平衡二叉树(AVL树):如果二叉树的所有节点的两棵子树的高度差不大于1,则二叉树被称为平衡二叉树。二叉树是n(n>0)个节点所构成的集合,它或为空树(n=0),或为非空树。

2022-12-15 15:38:22 56

原创 数据结构栈和队列

栈是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特珠含义,称为栈顶(top),相应地,表头端称为栈底(batcom)。不含元素的空表称为空栈。假设栈S=(a1,a2,…,an),则称a1为栈底元素,an为校顶元素。栈中元素按a1,a2,…,an的次序进栈,退栈的第一个元素应为栈顶元素。换句话说,栈的修改是按后进先出的原则进行的,如下图所示。因此,栈又称为后进先出的线性表,它的这个特点可用下图所示的铁路调度站形象地表示。顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元

2022-12-05 10:56:22 154

原创 数据结构的单链表

用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素a,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(直接后继的存储位置)。这两部分信息组成数据元素a的存储映像,称为节点(node)。它包括两个域:其中存储数据元素信息的域称为数据域;存储直接后继存储位置的域称为指针域。指针域中存储的信息称作指针或链。n个节点[a(1<i<n)的存储映像]链接成一个链表的链式存储结构。又由于此链表的每个节点中只包含一个指针域,故又称线性链表或单链表。

2022-11-23 11:41:10 403

原创 文件的操作

文件是指一组相关数据的有序集合, 这个数据集叫做文件名。其中分为源程序文件(c)、目标文件(obj)、可执行文件(exe)、库文件 (头文件)等。从用户的角度看,文件可分为普通文件和设备文件两种。

2022-10-16 19:14:35 89

原创 动态内存管理

因为动态的通讯录是用malloc函数分配给的空间。为了解决这个问题就拥有了动态内存管理, 允许自己在堆区申请到一块连续的空间,不够时,可以申请扩大,多了,可以缩小。这是我们原来的静态的版本,空间是固定的。我们希望最开始可以存放3个人的信息,如果空间放满了,就自动增加2个空间,按需要给我们增加空间。然后增加的函数也需要改变,因为原来的函数不会因为容量满的时候而自动增加。calloc 函数的功能和 malloc 十分相似,但calloc会将申请的内存空间初始化为0。设计好的结构体里的三个成员都没有值。

2022-10-06 14:28:47 325

原创 库函数的模拟实现

设这两个字符串为str1,str2,若str1等于str2,则返回零;若str1大于tr2,则返回正数。memcpy功能:由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。就是当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果是正确的。memmove和memcpy函数都是C语言中的库函数,作用是拷贝一定长度的内存的内容,它们的。strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。

2022-10-04 16:05:45 150

原创 结构体的见解

是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员”。结构体类型不是由系统定义好的,而是需要程序设计者自己定义的。struct为结构体关键字,student为结构体的标志,为结构体成员列表,其必须列出其所有成员;为此结构体声明的变量。例如{通常,这3部分至少要出现2个。结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。在一个结构体中以位为单位来指定其成员所占内存长度。

2022-09-24 19:55:09 177 1

原创 扫雷游戏的设计和代码

目录一扫雷设计思路二设计步骤 1创建游戏菜单 2棋盘的展现和初始化 3布置雷 4排查雷三游戏运行展示四 代码 1text.c 2game.h 3game.c在设计过程中,我们首先进行游戏菜单和棋盘的建立,然后初始化棋盘,并且在棋盘上布置雷,之后在排查雷,判断雷直到游戏结束。写一个菜单,根据个人喜好可以设计不同的菜单,用do...while实现输入1进入游戏,输入0退出游戏,输入其他数

2022-08-10 21:35:39 829

原创 三子棋的设计和代码

C语言三子棋三千字讲解

2022-08-10 16:33:43 720

原创 第一篇:编程学习

大家好,我是一名信息管理与信息技术专业的学生,目前开始学习C语言,向学长请教后得知写博客不仅对自身的学习可以起到记录与总结的作用,对以后也能受益无穷。所以在接下来的日子里,我会努力的去学习,偶尔会通过写博客与大家分享,希望能和大家共同进步,共同成长,相互交。本人对IT行业的公司不是很了解,知道的而就只有百度腾讯等几家行业内有名的公司。所以目前还没有想进入的公司,只想学好技术,只有学好技术,才能有选择公司的权力。

2022-06-01 12:50:36 102 4

空空如也

空空如也

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

TA关注的人

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