自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 map和set的底层实现

map和set的底层都是由红黑树构成,但是map是kv模型,set是k模型。如何用一颗子树来同时封装map和set,还有怎么实现map/set的迭代器是这节重点。

2024-07-01 18:12:33 266

原创 stl的map和set

map和set底层都是红黑树set是key模型结构,本质就是看一个元素在不在容器中。map是key/value结构,里面存了一个pair结构,可以通过一个值来查找另外一个值map和set结构中遍历出来的都是有序并且去重了的,map和set都支持增删查并不支持改,因其底层是红黑树,改数据会使其不再是红黑树的结构了。

2024-06-27 14:58:26 317

原创 红黑树的插入

红黑树是一颗搜索二叉数,它的节点不是红色就是黑色,且最长路径不超过最短路径的两倍对比avl树,既然有了avl树,为什么还要有红黑树呢?avl树是一颗高度平衡的搜索二叉数,它的高度差不能超过一,所以要求多次的旋转,搜索效率是logn。但是红黑树是一颗近似平衡的搜索二叉数,它的最长路径不超过最短路径的二倍,搜索效率是logn-2logn。两者效率差不多,但是因为avl树要进行多次旋转,所以反而增加了时间。

2024-06-26 17:10:08 164

原创 AVL树的插入

产生原因:搜索二叉树在有序的数组进行插入时,会导致搜索二叉数的查找效率为o(n),为了避免这种情况引入了二叉搜索树AVL树又叫高度平衡搜索二叉数,它保证了每个节点的左右子树高度差的绝对值不超过1AVL树要求:1,他的左右子树都是AVL树 2,左右子树高度之差(简称平衡因子)即左子树高度减去右子树高度的绝对值不超过1AVL树不一定需要平衡因子,使用平衡因子是一种实现控制方式。

2024-06-20 20:33:37 394

原创 二叉搜索树递归和非递归实现

K _key;

2024-06-12 21:02:01 146

原创 c++多态

多种形态静态的多态:函数重载,看起来调用同一个函数有不同行为动态的多态:一个父类对象的引用或指针去调用同一个函数传递不同的对象会调用不同的函数。

2024-05-21 20:39:18 225

原创 c++继承

在继承体系中基类和派生类都有独立的作用域成员函数只要函数名相同就构成隐藏,子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏。

2024-05-18 17:45:54 833

原创 stack,queue和priority_queue

stack栈具有后进先出的特点。

2024-05-12 21:12:20 268

原创 list模拟实现

list是一个带头双向循环链表,在构建list时,创建一个头节点,让其prev和next都指向自己。

2024-05-12 14:29:38 277

原创 vector模拟实现

vector是表示可变大小数组的序列容器string和vector的区别:vector不支持比较大小 vector不支持+=.+等操作 string结尾有'/0'

2024-05-08 10:16:24 309

原创 模板和String类的实现

c语言在实现栈,队列时只能用一种类型去实现,就是因为c语言不支持泛型编程,c++为了支持泛型编程,引出了模板的语法。

2024-04-16 08:59:26 817 1

原创 初始化列表和内部类,动态内存管理

用法如:1.全部在定义的时候初始化或者1.只初始化常量那么构造函数能够初始化数据,为什么还要初始化列表呢?其实我们应该认识到构造函数内部并不是初始化,而是赋初值,当有一个常量例如上面的N时,因为常量必须在定义的时候初始化,所以N不管如何都只能放到初始化列表里。同时,每个成员变量在初始化列表中只能出现一次(即只能初始化一次)数据声明和定义的地方:当一个类中有一下成员时必须放在初始化列表位置中进行初始化(因为必须在定义的时候进行初始化)

2024-04-05 17:32:20 420 1

原创 默认成员函数

可以看到d1,d2都调用了print函数,可是为什么他们在相同的函数找到自己的值呢,这就是隐藏的this指针发挥了作用那么this指针存在哪里的呢?因为this指针是形参,所以一般情况下是栈。

2024-03-27 21:11:59 860 1

原创 C++基础入门

命名冲突问题1,我们自己定义的变量,函数可能跟库里面命名冲突2,项目较大多人协作,两人命名发生冲突c语言没有办法很好解决这个问题。

2024-03-25 19:46:16 764 1

原创 数据结构排序及其算法分析

个人在写排序时感觉最难的就是边界控制还有排序每个数是怎么走的。还有快速排序由于要用递归所以要传数组的左右下标,其他排序传数组个数n就行,但是快速排序的right=n-1;我当时因为搞不清下标和数组个数关系导致卡了很久。

2024-03-21 21:13:39 561 1

原创 链式二叉树

链式二叉树建立普通二叉树增删查改没什么价值(用来存数据太复杂了)在普通二叉树的基础之上增加一些性质才有意义,例如:搜索二叉树(最多查找高度次)。那么普通二叉树不关注增删查改,它关注遍历结构目的:1,为以后学习更有用的树打基础。2,很多oj题有普通二叉树因为二叉树增删查改太复杂,所以我们直接创建一个树链式二叉树建立。

2024-03-11 20:05:43 200 1

原创 二叉树,堆排序,向上调整.向下调整算法的实现

树是一种非线性的数据结构,有一个特殊的结点,称为根结点,树是递归定义的。表示树结构最优方法:左孩子右兄弟方法。

2024-03-09 20:43:43 403 1

原创 c语言实现栈和队列

其实用数组和链表去实现都可以,最佳方案用数组更好,因为数组在尾部进行尾插尾删还是很方便的,唯一缺点就是增容有空间浪费。如果用链表实现栈,插入删除数据会不方便,如果用尾做栈顶,尾加尾删会不方便,如果用尾做栈底,那么栈的插入删除就是链表的头插头删,也是可以实现栈的。所以我们用链表实现,因为每次都要找尾,所以我们定义一个尾指针,那为什么单链表不也引用尾指针呢?要注意如果头指针为空,第一个表达式就错了,当删到最后一个头指针时,如果不将尾指针置空,那么尾指针就指向一个不知道的空间,造成野指针。初始化的是头尾的指针。

2024-03-03 16:35:21 395

原创 c语言实现带头循环双向链表

上一篇写了结构最简单的一个单链表,本篇实现最复杂的一个链表结构:带头双向循环链表,虽然它结构最复杂,但实现起来我感觉却比单链表简单。此外,此链表的头只是一个指针,不存储有效数据。

2024-03-01 18:14:01 251

原创 c语言实现数据结构单链表

优点1,可以随时增容且不浪费空间2,头部中间插入数据不需要挪动数据缺点1,不能根据下标来定位数据(不支持随机访问)2,每个数据都要存一个指针。

2024-02-26 13:47:58 399 1

原创 【无标题】c语言数据结构————顺序表

作为数据结构第一个学习的结构,在我看来顺序表就差不多相当于相当数组,只不过在数组的基础上,它要求从头开始,而且不能间隔跳跃。接下来就是创建头文件SeqList.h和两个主文件Test.c和SeqList.c。我们实现顺序表的基本操作:增删查改。

2023-12-31 22:47:55 364

空空如也

空空如也

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

TA关注的人

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