凉夏y
码龄4年
关注
提问 私信
  • 博客:136,833
    136,833
    总访问量
  • 28
    原创
  • 689,930
    排名
  • 114
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2021-04-07
博客简介:

LiangXiay的博客

查看详细资料
个人成就
  • 获得218次点赞
  • 内容获得35次评论
  • 获得627次收藏
  • 代码片获得357次分享
创作历程
  • 10篇
    2022年
  • 18篇
    2021年
成就勋章
TA的专栏
  • 数据结构与算法
    7篇
  • C++
    10篇
  • Linux
    2篇
  • C语言
    9篇
兴趣领域 设置
  • 后端
    后端
TA的社区
  • 姜姜小盆友
    54 成员 249 内容
    管理者
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

186人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

红黑树与map、set的封装

简单了解红黑树上一篇博客我们了解了AVL树的插入实现,其插入搜索时间复杂度是O(logN)级别的。而红黑树也是一颗平衡搜索二叉树,但是与AVL树不同的地方在于,红黑树的平衡策略是近似平衡,而非AVL树的完全平衡。可能有小伙伴就会问了,不是越平衡效率越高吗?为什么更多地方采用的是红黑树而非AVL树呢?这里就要从红黑树近似平衡的特点说起了,由于平衡限制的并不那么严格,所以红黑树通过旋转调整平衡的次数相比AVL树就更少了,也就是说红黑树的插入会比AVL更快。而红黑树通过一系列规则,将根节点到叶子结点的最长
原创
发布博客 2022.06.03 ·
297 阅读 ·
2 点赞 ·
2 评论 ·
0 收藏

AVL树的插入

为什么需要AVL树?我们知道搜索二叉树通过对每一个结点限制规定:左子树都比比根节点小,右子树比根节点大,来达到O(logN)的搜索效率的:​​但是一般的搜索二叉树还有一个很严重的问题:当左右子树高度差很大时,会导致搜索效率极度退化,甚至在顺序插入时退化至O(N):很明显,普通的搜索二叉树在一些情况下并不能达到预期的O(logN)搜索效率,而其原因就是高度的极度不平衡。而AVL树就通过旋转的方式来维持搜索二叉树的平衡,AVL树得名于它的发明者G. M. Adelson-Vels
原创
发布博客 2022.05.29 ·
2507 阅读 ·
3 点赞 ·
1 评论 ·
13 收藏

程序虚拟地址空间

在学习计算机语言时,我们了解到一个进程会占用一定的内存空间。而一个进程占有的内存空间又被分为栈区、堆区等。我们可以绘制下图来说明一个程序的地址。(省略命令行参数与环境变量、内核区部分)。但是想必大家对内存这个经常接触的事物仍有许多疑惑,例如:为什么内存空间要被叫作虚拟地址空间呢?而且我们会发现,任何程序的地址好像都是从0开始,那许多进程同时运行的话,地址不会冲突吗?运行下面这段代码,我们还会发现更奇怪的现象。#include <iostream>#include <
原创
发布博客 2022.03.17 ·
404 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

vector迭代器失效分析

我们在使用迭代器时,常常会遇到迭代器失效的情况。一旦迭代器失效,就可能出现各种意想不到的错误,下面,我们就来分析迭代器失效的原因,以及迭代器失效的解决办法。
原创
发布博客 2022.03.14 ·
2265 阅读 ·
7 点赞 ·
1 评论 ·
15 收藏

string类的深浅拷贝

1.浅拷贝在学习string的时候,我们会遇到需要对string类进行拷贝的情况。通常,我们进行数据拷贝只需要将一个类里的基本数据进行值拷贝即可。但是实际上,直接进行值拷贝对于string类来说是不合理的。class string{ //... string& operator=(const string& s)//看似正确的拷贝方式 { _str = s._str; _size = s._size; _capacity = s._capacity; ret
原创
发布博客 2022.03.05 ·
3443 阅读 ·
2 点赞 ·
0 评论 ·
3 收藏

C++之模板入门

1.函数模板在C语言中实现一个加法的函数并不困难。int add(int x, int y){ return x + y;}但是很明显,这个函数限定了两个相加的数都是整数,并且其返回值也为整数。但是,如果我们想得到两个双精度浮点数相加的结果呢?那么add函数可能就要写成:int addint(int x, int y){ return x + y;}double adddouble(double x, double y){ return x + y;}那么,如果我
原创
发布博客 2022.02.22 ·
756 阅读 ·
3 点赞 ·
0 评论 ·
1 收藏

Linux中的权限

1.权限是什么生活中的权限处处可见,没有门票,就进不去特定的场所。没有会员,就没法看某些电影、电视剧。而在Linux中,权限是指用户能否对文件读、写、执行。用户分为超级用户(root)与普通用户。以超级用户的身份在Linux下做任何事情,不会受到限制。而普通用户则会受到权限的约束,所以一般而言,Linux中的权限是指对普通用户的限制,而超级用户则不受权限的约束。在linux下,使用 ll 命令可以看到当前路径下所有文件的详细信息,而在信息的开头我们能看到类似于-rw-rw-r--的十位字母组合。
原创
发布博客 2022.02.09 ·
1824 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

构造函数中的初始化列表

对于日期类,我们可以使用如下构造函数 Date(int year = 1900, int month = 1, int day = 1) {//这里的构造函数没有判断日期合法性,仅用来举例 _year = year; _month = month; _day = day; }显然这是没有问题的。但我们要知道,在构造函数的函数体内进行的是成员变量的赋值,而成员变量的初始化则是在初始化列表中进行的。初始化的格式:以 冒号开始,每一行是一个成员变量,后面跟着括号,括号里面放初始值,每
原创
发布博客 2022.01.23 ·
622 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

类和对象之日期类的实现

通过类和对象的了解我们可以知道,类是一种自定义类型。今天我们就要创建一个可以保存某一天的年、月、日三个信息的类。此外,这个类还可以完成一些相对基础的操作,例如计算两个日期之间相差多少天、比较两个日期的大小等。一个类最基础的就是六个默认成员函数,他们分别是构造函数,析构函数,拷贝构造,赋值重载,以及两个不常用的取地址及const对象取地址。由于后两个不常用,下面的实现中不会进行说明。1.构造函数与析构函数一个类最基础的功能就是初始化与清理,所以我们先讲讲这两个函数的实现。首先是构造函数,构造函
原创
发布博客 2022.01.18 ·
655 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏

初识类和对象

1.什么是类和对象?在C语言中,并没有类和对象这个概念。而在C++中,引入了这个概念。提到类和对象,我们先要了解什么是面向过程和面向对象。在一个外卖系统中,面向过程的设计思路是将送餐、下单、接单等操作直接罗列出来并单独进行设计。而对于面向对象,我们可以设计出用户、商家、配送员这三个类。而用户下单、商家接单、配送员送餐则是不同类之间的交互操作。在C语言中实现栈,我们会通过一个结构体储存一个栈的所有数据:指向栈空间的指针、栈顶元素、栈的大小等数据。而操作栈的函数则与数据分离,保存在栈结构体之外。
原创
发布博客 2022.01.15 ·
1120 阅读 ·
3 点赞 ·
0 评论 ·
6 收藏

C++中引用的概念以及使用

1.引用的概念通俗的说,在C++中,引用的作用是给变量起外号。下面我们举个例子来说明:int a = 10;int& b = a;//引用的声明方式:类型标识符 &引用名=引用对象在上面的语句中,a是一个整形变量,而b是a的引用。cout << a << endl;cout << b << endl;//输出结果为://10//10输出a和b的值,我们会发现,b所存的值与a所存的值相同。当我们对b所存的值进
原创
发布博客 2021.12.05 ·
990 阅读 ·
2 点赞 ·
0 评论 ·
4 收藏

快速排序详解

1.什么是快速排序我们知道排序有很多种,常见的如希尔排序,插入排序,选择排序,堆排序等等,而快速排序也是排序家族中的一员。因为其在大多数情况下有着优秀的综合性能,快速排序的快速也算是实至名归,接下来就为大家讲解快速排序的思想与实现。2.快速排序的核心思想快速排序通过多次比较与交换来完成排序。而这个过程又被分为了多次重复单趟排序,接下来我们先从每一趟的排序讲起。快速排序的单趟排序思想是:在一个无序数组中取一个数key,每一趟排序的最终目的是:让key的左边的所有数小于key,key的右边都
原创
发布博客 2021.11.19 ·
112646 阅读 ·
157 点赞 ·
20 评论 ·
545 收藏

OJ题:设计一个循环队列

(本题取自LeetCode622.设计循环队列)1.题目介绍循环队列是指一种线性的数据结构,该结构遵循先进先出的原则,并且队尾则被连接在队首之后以形成一个循环。循环队列可以循环使用队列之前用过的空间,普通队列的头元素前的节点不能再使用,而循环队列可以在队列没有满之前循环的使用空间。对于循环队列我们需要支持如下的操作:1.构造一个队列长度为k的循环队列2.从队首获取元素,若队列为空则返回-13.获取队尾元素,若队列为空则返回-14.向循环队列插入一个元素,若成功插入则返回.
原创
发布博客 2021.11.01 ·
532 阅读 ·
8 点赞 ·
2 评论 ·
3 收藏

双向带头循环链表的介绍与实现

双向带头循环链表是结构上最为复杂的一种链表,但是正是因为其结构复杂,也给这种链表带来了其他链表所没有的优势。今天我们就介绍一下双向带头循环链表并且完成其构建。1.双向 带头 循环都是什么意思?2.双向带头循环链表的结构...
原创
发布博客 2021.10.29 ·
403 阅读 ·
5 点赞 ·
3 评论 ·
0 收藏

堆与堆排序

堆排序是指利用堆这种数据结构对数据进行排序的算法。要了解堆排序,我们要先对堆进行一定的了解。堆堆是一种特殊的完全二叉树。在完全二叉树的基础上,堆还有以下特点:堆的每个父节点都大于等于其所有子节点 这类堆被称为大堆或者堆的每个父节点都小于等于其所有子节点 这类堆被称为小堆比如下面的二叉树就是一个小堆堆的向下调整算法了解了堆的基本概念后,我们来了解如何将一个完全二叉树转变为堆。首先,我们可以利用向下调整算法将一个左右子树都为堆(要得到小堆则两个子树都要是小堆,要得到大堆.
原创
发布博客 2021.10.23 ·
242 阅读 ·
5 点赞 ·
0 评论 ·
3 收藏

从树到二叉树入门

1.堆是什么?堆是一种特殊的完全二叉树。堆的特点是,它满足:它的每一个父节点都父节点的值大于它的两个子节点的值 或者 它的每一个父节点都父节点的值小于它的两个子节点的值。若它的根为最大值则称之为大根堆,若它的根为堆节点里的最小值则称之为小根堆。...
原创
发布博客 2021.10.16 ·
376 阅读 ·
7 点赞 ·
1 评论 ·
0 收藏

与随机读取有关的函数

通过文件操作我们可以实现对通讯录的保存,但是要在文件的具体位置进行操作,又要怎么实现呢?下面我们介绍与随机读取操作有关的三个函数。fseek函数fseek函数可以实现文件指针的偏移操作。fseek函数的声明如下int fseek(FILE *stream, long int offset, int whence)其中stream为要操作的文件指针,offset则为文件指针的偏移量,whence则为偏移offset的起始位置,whence一般指定为SEEK_SET:文件的起始位置、SEE
原创
发布博客 2021.10.04 ·
218 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

用C语言实现文件版的通讯录

1.为什么要进行文件操作在往期,我们使用C语言构造过通讯录,但是无论是一次性开辟好空间的通讯录,还是动态版的通讯录,都无法做到退出通讯录后将信息保存下来。但是通过文件操作,我们可以在退出通讯录时将信息保存到文件中,并且在再次打开时读取信息到程序中,以达到每次打开时能信息的功能。2.如何保存通讯录在C语言里,有文件操作函数帮助我们将程序中的信息保存到文件中。为了保存通讯录,我们将会用到fopen,fclose,fwrite以及fread函数。通过这四个函数,我们可以在关闭程序时将信息写入到文件中,
原创
发布博客 2021.10.04 ·
374 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

通讯录的动态版本的实现

前几天我们使用C语言创建了一个固定大小的通讯录,这次我们在原有的基础上将其修改为动态大小的通讯录。1.malloc、calloc、realloc以及free函数的介绍1.malloc与calloc函数malloc函数的函数声明为void *malloc(size_t size)其函数功能为,在堆上开辟一块size个字节的空间,开辟成功后以void*类型返回这块空间的起始地址。若开辟失败,则返回NULL。calloc函数的函数声明为void *calloc(size_t nit
原创
发布博客 2021.09.23 ·
156 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

用C语言实现通讯录

1.框架构造首先,为了构造一个通讯录,我们定义一个结构体peoinfo存放每个人的信息:#define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 12#define ADDR_MAX 20struct peoinfo//定义一个结构体保存一个人的信息{ char name[NAME_MAX];//姓名 int age;//年龄 char sex[SEX_MAX];//性别 char tele[TELE_MAX];//电话
原创
发布博客 2021.09.18 ·
1550 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏
加载更多