- 博客(39)
- 收藏
- 关注
原创 C++: unordered_map、unordered_set与map、set的区别
unordered_map和unordered_set是C++11标准模板库(STL)中引入的两个重要的无序关联式容器。它们提供了基于哈希表的快速元素访问能力,与基于红黑树的有序关联式容器(如map和set)形成对比,它们之间存在显著的区别。
2024-11-06 10:02:50 167
原创 C++:哈希表的实现
假设哈希表中已经映射存储了N个值,哈希表的大小为M,那么负载因子 = N / M,负载因子有些地⽅也翻译为载荷因子/装载因子等,他的英文为load/factor。负载因子越大,哈希冲突的概率越高,空间利用率越高;负载因子越小,哈希冲突的概率越低,空间利用率越低:这是哈希表的核心,它将键(Key)映射为一个数组索引(通常称为哈希值或哈希码)。哈希函数的设计至关重要,因为它直接影响到哈希表的性能。一个好的哈希函数应该能够均匀地分布键的哈希值,以减少哈希冲突。
2024-11-06 10:02:47 943
原创 C++:AVL树的实现
定义:AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。性质它的左右子树都是AVL树。节点的左子树不为空,平衡因子-1,右子树不为空,平衡因子+1。任意节点的左子树和右子树的高度差(平衡因子)的绝对值不超过1(-1、0或1)。当该树的平衡因子等于二或负二的时候要进行调整。增删查改的效率为O(logN)。当树里有平衡因子等于2或-2时,就需要进行调整了。
2024-10-26 10:00:49 1032
原创 C++:set和map的使用指南
set底层是用红黑树实现,增删查效率是(O(logN)),迭代器遍历是走的搜索树的中序,所以是有序的。set的声明如下,T就是set底层关键字的类型。set默认要求T支持小于比较,如果不支持或者想按自己的需求走可以自行实现仿函数传给第⼆个模版参数(⼀般情况下,我们都不需要传后两个模版参数)set中只能存在一个相同的值,若插入相同的值给set,将会插入失败。std::setset的支持正向和反向迭代遍历,遍历默认按升序顺序,因为底层是⼆叉搜索树,迭代器遍历走的中序;
2024-10-23 00:18:58 814
原创 C++:二叉树的层序遍历
队列 来出当前层的节点。一旦Oqu队列空了,将Iqu队列的数据给Oqu队列,直至两个队列都为空了。用队列来放入子叶,用一个levelsize来记录每一层的数量,出数据的时候就出size个数据。队列 来如下一层子叶的节点,一个。
2024-09-26 15:33:04 425
原创 C++:数组中两个字符串的最小距离
是否为 -1,然后计算它们直接的距离,并且修改。来遍历一遍输入数据,一旦遇到QWER就判断。来记录666的位置。
2024-09-26 15:13:47 344
原创 C++:AB5 点击消除
先将字符串里的字符放入栈里,然后与字符串的下一个字符比较,若相同,栈pop掉栈顶元素,反之,重复步骤。最后栈里的元素就是我们要的最终形态的逆置。(我们将它逆置回来即可)先判断模拟栈和string对象里字符,若相同,删除,反之,放入模拟栈。
2024-09-25 21:07:34 416
原创 C++:stack和queue的实现
栈是什么,怎么用实现一个栈,可以看这篇文章来用C语言实现一个栈(stack)和队列(queue)。下面实现stack和queue要使用一个容器deque,可以看 来了解deque。
2024-09-24 13:44:00 206
原创 C++:deque的底层原理
deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。deque有一个致命缺陷:不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其。际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看。是否移动到某段小空间的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实。
2024-09-24 13:43:44 285
原创 C++:priority_queue(优先级队列)的模拟实现
优先级队列不是队列,C++ 中的优先队列是STL中的派生容器。当你往优先级队列里存放数据的时候,它会像堆一样存放数据,将最大的数据或最小的数据放到前面。
2024-09-08 20:45:20 928 1
原创 LeetCode:盛最多水的容器(11)
给定一个长度为的整数数组。有条垂线,第 i 条线的两个端点是和。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。
2024-09-05 19:55:04 461
原创 C++:类的默认成员函数
默认成员函数就是⽤⼾没有显式实现,编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个。经过编译器处理之后,类A不在为空,它会自动的生成六个默认的成员函数,即使这六个成员函数什么也不做。
2024-07-19 20:09:05 1104 3
原创 C++:类的定义和实例化
class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前面或者后面加_或者m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。
2024-07-18 20:49:15 1298
原创 C++:运算符重载
我们可以重定义或重载大部分 C++ 内置的运算符。这样,我们就能使用自定义类型的运算符。重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。
2024-07-18 20:47:52 402
原创 C++:命名空间
在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使⽤命名空间的目的是对标识符的名称进行本地化,以避免名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
2024-07-17 15:38:26 327
原创 数据结构:二叉树的实现
这样我们就可以实现二叉树的层序遍历。在二叉树里查找一个值的时候,我们首先要确定查找方式,(这里以前序为例),我们用前序查找,如果左子树有这个值就返回该节点,没有就返回NULL,然后再查找右子树,若也没有就返回NULL。(二叉树的大部分功能的实现都需要用到递归,所以我们要对递归一定熟练度)当我们要构建一个二叉树的时候,可以用递归的方式来连接一个一个的节点。判断二叉树是否为完全二叉树的实现,跟上面基本同理,当与到空的时候就直接break去判断后面还有没有其他的数,无,则是完全二叉树,反之,不是完全二叉树。
2024-06-10 16:18:35 2200 4
原创 数据结构:插入排序和希尔排序
比较,比它小就插入,比它大就放到它的后面。但不是直接的插入,因为我们还不确定更前面有没有比tmp小的数据,所以若遇到比tmp要大的数就直接后移,直到遇到比tmp小的数,就把tmp赋值到end+1的位置。插入排序在我们生活中最常见的例子就是打牌时候的理牌的过程,可以看作为插入排序。我们拿一个数,先和数组的第一个数比较,比它小就插入,比它大就放到它的后面。希尔排序的思想与插入排序很像,不过希尔排序将数组分为了很多小组进行插入排序,然后缩小组的大小直至1,那就跟插入排序一样了。,使其可以多次的单趟排序直至排好。
2024-06-10 16:18:07 409 1
原创 C语言:设计循环队列
本篇博客是写完LeetCode_662.设计循环队列之后有感而发,于是写下了一些思路和总结。本题用了两种方法来解答——顺序表和链表。
2024-05-18 16:18:30 954 7
原创 详解栈和队列的实现以及它们的相互实现
数据结构有:顺序表、链表、栈、队列、二叉树等等,栈和队列的实现和功能对与顺序表、链表来说有很大不同,而且要完成它们之间的相互实现,今天就让我们来看看它们两个的特殊之处。
2024-05-12 21:54:43 1139 7
原创 详解链表带环的问题
在我们练习链表的习题的时候,不可避免的会遇到链表带环的问题,或许你知道用快慢指针来解决带环链表的问题,但你不一定知道其中蕴含的数学属性。
2024-05-08 22:15:09 1942 4
原创 C语言编译和链接
我们写的代码是高级编程语言,其实计算机是不能直接识别和执行,当我们使用编译器运行我们的代码,它会执行一系列的操作将其变为机器语言,然后再运行我们的代码。
2024-04-12 18:44:58 672 2
原创 文件和文件操作
文件有程序文件和数据文件。数据文件可以是数字的、字符的、字符数字的或二进制的。文件可以是自由形式的,例如文本文件,或者可以是具有严格格式的。通常,文件为位、字节、行或记录的序列,其含义由文件的创建者和用户定义。(这段话取自C语言中文网。
2024-03-29 18:50:31 665 1
原创 超详解结构体
若我们想要定义一个学生,我们需要得到他\她的名字、 性别、身高等等,那我们之前学的单单char类型、int类型就不够用了,为了使一个变量可以有多个类型,就有了结构体。 例如我们要描述一个学生: 2.结构体的特殊声明 前面结构体的声明有自定义类型结构体标签名,若没有它确实就是一个结构体的特殊申明。 编译器会把上⾯的两个声明当成完全不同的两个类型,所以是⾮法的。 匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使⽤⼀
2024-03-19 18:27:26 533 2
原创 整数在内存中的存储
C语言中有很多数据类型(char、sort、int、float、double等等),但你知道它们在计算机里是如何存储的吗?
2024-03-17 19:12:50 320 1
原创 超详细的解析C语言中的字符函数和字符串函数
我们开始学习C语言时不可能避开字符,为了更好的使用字符和字符串我们就想要利用C语言里的库函数,下面让我来解析说明C语言中关于它们的库函数。
2024-03-15 19:04:09 358 1
原创 全方面的带你认识指针——指针的详解
指针是我们学习编程避不开的话题,它是编程中最重要的概念之一,很多初学者对它闻之色变、胆战心惊。虽然指针很重要,但并不代表它难如登天。
2024-03-05 20:59:00 2240
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人