自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二叉搜索树的实现

二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树。

2024-09-12 11:04:25 309 1

原创 数据结构:位图

概念:位图本质上是个数组,用来存放数组,数组中的元素用来判断某个元素是否存在于这个位图集合中,当元素存在时,对应位的值为1;当元素不存在时,对应位的值为0。我们使用比特位来表示某个数是否存在,一个字节包含包含8个比特位,无符号整数的范围是0到。实现主要有三个接口:set、reset、test。/8个字节,相比于其他方法非常节省空间。2.先排序,然后二分查找。

2024-09-12 11:04:03 375

原创 C++多态

在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口 类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生 类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承class Carpublic:public:public:int main()//Car car;//报错,不能实例化A a;B b;return 0;

2024-07-21 19:53:06 782

原创 linux权限的概念

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。一个目录下的文件可能由其他人创建,但被另一个人删除,所以为了解决这个问题,我们引入了粘滞位,当一个目录被设置为"粘滞位"(用chmod +t)rwx的权限也可以用八进制来表示,具有权限对应位数就为1,反之就为0,如 -w-的八进制为2,那。确认身份的过程中,只能确定一次身份,只能有第一次身份的权限,但root不受权限约束。r是读的权限,w是写的权限, x是可执行权限,-表示没有权限。

2024-07-21 19:52:48 277

原创 C++ 继承

Person是父类,也称作基类,Student和Teacher是子类,也称作派生类。

2024-07-17 20:36:47 889

原创 C++模板进阶

模板参数分类类型形参与非类型形参。类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。1.非类型模板参数,跟define不同,根据传的参数N不同,可以实例化不同的对象,将事情交给编译器做,不用再写参数N不同的类了2.N是常量,不能改变,并且可以添加缺省参数。

2024-07-17 20:36:22 367

原创 C++stack和queue

适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。

2024-07-15 11:15:48 340

原创 C++ :优先级队列

这个运算符重载不像其他的运算符重载一样,operator()的返回值和参数可以进行较大改动。

2024-07-15 11:15:16 304

原创 C++list的模拟实现

因为之后要访问这个类的成员变量函数和结构体,所以在这里将class直接改为struct 构造函数。

2024-07-05 19:24:42 517

原创 C++vector的模拟实现

2.这里需要一个oldsize来记录更新_start前_finish与_start的间隔,否则会出现_finish还是原来的_finish的情况。这里需要记录一下pos和_start的距离, 当insert进行扩容的时候,pos位置需要更新,否则pos还是指向已经释放的空间,会出现问题。1.memcpy是浅拷贝,对于自定义类型的拷贝,会出现,所以我们使用了另一种 实现方式,能够调用自定义类型的拷贝构造来解决问题。加上这句话,在写了带参构造函数的情况下 ,编译器会自动生成默认构造。

2024-07-05 19:24:18 184

原创 stl之string

下一个位置。

2024-06-26 14:50:54 869

原创 string的模拟实现

利用构造函数实现,交换tem和*this,并且tem出作用域会调用析构函数。>>和<<不写成友元形式是因为我们不需要访问其成员变量。现代写法:调用了拷贝构造来进行,这里不是s的引用。

2024-06-26 14:50:43 247

原创 C++模版初阶

如何实现一个通用的交换函数?使用函数重载虽然可以实现,但是有一个不好的地方:重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。

2024-06-14 09:00:07 267

原创 linux指令2

mv src(文件、目录) dst (路径、文件、目录)src ->路径相当于将这部分内容剪切到路径中,src->文件、目录相当于重命名,重命名后文件还是文件,目录还是目录。

2024-06-14 08:59:55 760

原创 C++的内存管理

对于自定义类型,malloc等函数不能进行初始化,但我们可以用new进行初始化class Apublic:A(int n=4):_a(n):_a(aa._a)_a = aa._a;int main()//调用构造delete p1;//会自动调用析构return 0;new在对自定义类型进行处理时会自动调用构造函数,而delete会自动调用析构函数int main()return 0;

2024-06-08 08:38:35 257

原创 类和对象(二)(C++)

虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。

2024-06-08 08:38:21 2080

原创 类和对象(一)(C++)

1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内 联函数处理。2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::,这些在之后都会经常用到class Datepublic:// 这里的year到底是成员变量,还是函数形参?为了区分开来,会在成员变量前加_来区分,也可以用其他方式。

2024-06-02 16:06:35 1935

原创 c++引用和内联函数

1. inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运 行效率。2. inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现),可能存在函数体过大inline无法使函数体展开的情况。因为inline被展开,就没有函数地址 了,链接就会找不到,所以函数体可直接写在声明中。

2024-05-26 16:06:05 705

原创 Linux指令初识

Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。tab 快速按两次,可以进行命令补齐和路径补齐(把不知道的路径补齐)根目录的.和..都指向自己,其他目录.指向自己,..指向上级目录。以.开头的文件,为隐藏文件ls -a可以看到,ls -l看不见。两个点:特殊目录:上级目录,cd ..用来进行简单的路径回退。/是目录,可以放普通文件和目录,/里面的目录,也可以。-开头的是普通文件类型,文本文件普通文件的一种。任何一个目录下,都有.和..,新建的空目录也是。

2024-05-26 16:05:42 501

原创 c++函数重载

函数地址依靠函数定义生成,我们习惯在头文件中进行函数声明,将函数定义放在单独的.c文件中,test.c文件中只要调用的函数与头文件函数的参数匹配就行,链接时再去对应的.c文件对指定函数查找,且函数地址只与函数定义有关,这段代码不会报错,就是因为两个函数是不同作用域的,可以同时存在 ,不需要满足重载规则,但如果调用的话会报错,是因为调用时存在函数调用歧义。同一作用域,可以同名,但要满足重载关系。但c++用修饰后的函数名查找,支持重载。下面两个函数构成重载,但存在调用歧义。不同作用域,可以同名。

2024-05-20 17:47:15 197

原创 交换排序、归并排序、计数排序

这里做了一个小优化,通过flag的值来减少运行趟数,防止已经有序的情况下继续比较,最坏时间复杂度N方,最好时间复杂度o(N) ,具有稳定性。

2024-05-20 17:46:50 363

原创 c++中的命名空间与缺省参数

1、概念:在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。在c语言中rand是一个函数名,定义rand的值后会报错 ,两者之间会冲突,这时候使用命名空间就会很好的解决问题,将rand放入一个命名空间后再进行指定访问,如下。2、定义:定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。此外,命名空间可以包含许多内容,如函数,结构体等,2.展开命名空间的某一个。

2024-05-19 21:40:58 612

原创 二叉树的实现

对于深度为K 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对 应时称之为完全二叉树。双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;子孙:以某节点为根的子树中任一节点都称为该节点的子孙。节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;节点的度:一个节点含有的子树的个数称为该节点的度;4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=

2024-05-17 23:30:58 582

原创 插入排序和选择排序

一、插入排序。

2024-05-17 23:30:00 201

原创 循环队列的实现(数组)

循环队列实现。循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。可以用数组实现,也可以用循环链表实现假定数组开辟了n个空间,由于队列空和满时候的rear和front的值,所以在数组中额外开辟一个空间,以便区分空和满FrontRear。

2024-05-15 19:11:06 263

原创 堆的概念及实现

堆是一种完全二叉树的数据结构,可以分为大堆和小堆,基于堆可以实现堆排序大堆:父亲节点都大于等于孩子节点的值小堆:父亲节点都小于等于孩子节点的值堆在物理结构上是数组存储,但逻辑结构上是二叉树。

2024-05-15 19:10:57 290

原创 基于顺序表对通讯录的实现

实现通讯录前,首先要对顺序表的基本功能进行了解。

2024-05-10 20:44:46 249

原创 队列基本功能的实现

队列是先入先出的数据结构,队列的实现一般是通过链表来实现,从链表尾节点入数据,链表头结点出数据,以下是链表的基本功能。需要注意的是,队列的实现只需要尾插和头删的实现,所以在这里可以额外设置一个尾节点,只进行尾插而不用尾删是非常方便的。

2024-05-01 11:47:01 40 1

原创 栈基本功能的实现

栈的实现

2024-04-30 16:14:17 121

原创 快慢指针的具体应用

以下几道题目是对快慢指针应用的具体详解,题目来源为leetcode。

2024-04-26 22:19:26 438 1

原创 双向链表功能的实现

为了方便书写,先用typedef 将结构体名称化简,为了方便对结构体中的类型进行改变,用typedef定义一个数据类型,如以下代码,这里仅对int数据类型分析由上可知,除了初始化时是传的二级指针,其他情况是一级指针,这是因为初始化的时候需要创建一个哨兵位,并且需要修改哨兵位的值,在之后的功能中不需要对头结点的值进行改动,所以传一级指针,之后也一样。

2024-04-24 21:33:17 301 1

原创 贪吃蛇代码的简单实现

Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外,它同时也是⼀个很⼤的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程序达到开启 视窗、描绘图形、使⽤周边设备等⽬的,由于这些函数服务的对象是应⽤程序(Application),所以便 称之为Application Programming Interface,简称API函数。WIN32API也就是MicrosoftWindows 32位平台的应⽤程序编程接⼝。

2024-04-20 21:00:00 574

原创 文件操作详解

如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失 了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤ ⽂件。

2024-04-06 17:28:01 1450 1

原创 自定义类型:结构体

对齐规则:1. 结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处2. 其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。对⻬数=编译器默认的⼀个对⻬数与该成员变量⼤⼩的较⼩值。(vs中默认对齐数为8)3. 结构体总⼤⼩为最⼤对⻬数(结构体中每个成员变量都有⼀个对⻬数,所有对⻬数中最⼤的)的 整数倍。4. 如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。为什么存在内存对齐?

2024-04-03 00:00:00 221 1

原创 巩固位操作符和移位操作符知识的几道题目

【代码】巩固位操作符和移位操作符知识的几道题目。

2024-03-29 20:30:14 216 1

原创 字符串函数具体讲解

sep参数指向⼀个字符串,定义了⽤作分隔符的字符集合:strtok函数找到str中的下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记的指针;是将字符串追加到另一个字符串末尾的函数,注意:源字符串必须以 '\0' 结束;字符串以 含 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包含'\0',返回值是无符号整数,使用时包含头文件string.h。函数原型:char*strstr(const char *str1,const char *str2)

2024-03-27 20:52:40 446

原创 qsort函数使用及模拟实现

函数原型为void qsort(void *base,size_t num,size_t width,int ( *compare)( const void *,const void *)),它是能对任意数据进行排序的函数,其中base是数组首元素地址,num是数组元素个数,width是数组一个元素所占字节大小,最后一个是函数指针,并且qsort函数默认是升序排序。以下是对整形数据排序,但模拟实现可对任意数据进行排序。二、qsort函数的模拟实现。一、qsort函数的使用。

2024-03-21 22:05:22 215 1

原创 c语言内存函数

函数声明:void * memcpy(void * destination,const void * source,size_t num)函数声明:void *memmove(void * destination,const void * source,size_t num)函数声明:int memcmp(const void *ptr1,const void * ptr2,size_t num)函数声明:void *memset(void * ptr,int value,size_t num)

2024-03-19 08:00:00 343

原创 整数和浮点数在内存中存储

E的类型为unsigned int,但E是可以出现负数的,所以IEEE754规定,存⼊内存时E的真实值必须再加上 ⼀个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023,eg:当E为10时,保存为32位浮点数时,E的值就需要加127再转化为二进制。整数的二进制有三种表示方法,即原码、反码、补码,其中高位为符号位,正数符号位为0,负数符号位为1。1、E全为0:E的值1-127或者1-1023,有效数字M不加1,即表示接近于0的很小很小的数字。

2024-03-18 20:29:53 317

原创 指针知识点汇总2

二维数组,二维数组的数组名为第一行元素的地址,对二维数组,有*(*(arr+i)+j)=arr[i][j],且二维数组是连续存放的。数组指针:存放数组地址的指针,eg:int (*arr)[4]---[]优先级高于*函数指针数组,eg:int (*p[4])(),即存放函数指针的数组。指针数组:存放指针的数组,eg:int *arr[4]多级指针以此类推,即存放上一级指针的地址。二级指针,即为存放一级指针地址的指针,

2024-03-15 21:27:07 349 1

空空如也

空空如也

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

TA关注的人

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