自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

呋喃吖的博客

专注知识分享

  • 博客(179)
  • 资源 (1)
  • 收藏
  • 关注

原创 【C语言】常见面笔试题(10道)

文章目录写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明选择题1选择题2选择题3选择题4填空题1写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。#define SWAP(x) ((x) & 0x55555555) <<1 | ((x) & 0xaaaaaaaa ) >> 1 交换奇偶位,需要先分别拿出奇偶位。既然是宏,分别拿出用循环不是很现实,那就用&这些位的方式来做。奇数位拿出

2022-03-22 08:34:39 5974

原创 【Linux】进程控制(wait 和 waitpid)的理解和使用

文章目录1. 进程等待是什么2. 为什么需要父进程等待子进程退出3. 进程等待的方式3.1 wait 函数3.2 waitpid 函数3.2.1获得子进程的status信息3.2.2 理解下waitpid内部是如何返回status的3.2.3 waitpid 的options参数的理解1. 进程等待是什么我们知道一般我们在父进程fork出一个子进程,我们是希望子进程完成某些功能,也就是帮助父进程完成某些任务的;所以我们父进程就需要知道子进程完成的状态如何,是成功还是失败;所以我们就需要父进程通过wai

2022-03-20 17:37:16 3361

原创 【Linux】进程控制(进程退出方式)的理解和使用

fork的常规用法一个父进程希望复制自己,使父子进程同时执行不同的代码段。例如,父进程等待客户端请求,生成子进程来处理请求。一个进程要执行一个不同的程序。例如子进程从fork返回后,调用exec函数;创建子进程去执行和父进程一样的代码:也是可以的,但是并没有意义,所以一般我们不会这么做;fork调用失败的原因系统中有太多的进程;进程的创建是比较耗费资源滴,单独对于一个进程来说:不单单是把代码和数据加载内存就可以,还要为它创建PCB,这个PCB就很耗费资源了;实际用户的进程数超过了限制

2022-03-20 11:15:21 1460 2

原创 2. 两数相加(C++实现)

文章目录2. 两数相加思路--模拟加法运算2. 两数相加2. 两数相加思路–模拟加法运算其实这道题思路很简单:只要我们模拟加法运算即可;遍历两个链表,拿结点相加,要控制进位值;需要注意的是:要处理最后一个结点的进位值;/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNo

2022-03-17 20:18:05 1983 1

原创 Linux中对进程地址空间和写时拷贝的理解

C/C++程序的地址空间首先,抛出一个问题:我们平时所说:一个c/c++程序,内存被发划分好多个区域啊,自地址空间,从下往上增长,就有代码区,字符常量区,已初始化全局区,未初始化全局区,堆区,共享区,栈区等区域;请问这是内存吗?答案:肯定不是,那到底是什么呢?我们暂且不说;我们验证一下:这几个区域是否按上面画图的排序:从代码角度查看一下:#include<stdio.h>

2022-03-16 20:06:56 905

原创 209. 长度最小的子数组(C++实现)

209. 长度最小的子数组209. 长度最小的子数组思路–滑动窗口用滑动窗口能够解决本问题:窗口就是 满足其和 ≥ s 的长度最小的 连续 子数组。窗口的起始位置如何移动:如果当前窗口的值大于target 了,窗口就要向前移动了。窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,窗口的起始位置设置为数组的起始位置就可以了。class Solution {public: int minSubArrayLen(int target, vector<int>&am

2022-03-15 15:22:05 948 1

原创 Linux中环境变量的理解

文章目录案例引入环境变量的基本概念添加新环境变量常见环境变量查看环境变量的命令环境变量的组织方式和代码获取环境变量的方式案例引入首先我们有一个认知:无论是:程序,还是命令,还是工具…在Linux的角度看来它们都是可执行文件;当我们自己编写的程序时候,通常要使用./a.out的方式执行,也就是要带一个./的方式执行,这个 ./的意思就是当前路径下的意思;当我们执行一个程序时候:首先要找到它的位置,然后再执行; 所以说:我们通过 ./的方式就是找到一个可执行文件的路径开始执行;那为什么当我们执行一

2022-03-15 12:16:41 876

原创 977. 有序数组的平方(C++实现)

文章目录977. 有序数组的平方思路--双指针977. 有序数组的平方977. 有序数组的平方思路–双指针由于该数组有负数,且又是升序;所以说:平方后最大值,肯定在数组前面或者数组后面的值;所以我们只要定义两个指针分别指向头和尾;求他们的平方和,再比较,较大的放入新数组的结尾;这样就可以完成平方后的数组也是有序的;class Solution {public: vector<int> sortedSquares(vector<int>& nu

2022-03-14 17:15:30 1056

原创 844. 比较含退格的字符串

文章目录844. 比较含退格的字符串思路--双指针844. 比较含退格的字符串844. 比较含退格的字符串思路–双指针准备两个指针 endS, endT 分别指向 S,T 的末位字符,再准备两个变量 countS,countT 来分别存放 S,T 字符串中的 # 数量。从后往前遍历 SS,所遇情况有三,如下所示:1 若当前字符是 #,则 countS 自增 1;2 若当前字符不是 #,且 countS不为 0,则 countS自减 1;3 若当前字符不是 #,且 countS为 0,则代

2022-03-14 16:48:51 602

原创 283. 移动零(C++实现)

文章目录题目思路题目283. 移动零思路先把0移除:双指针解决,和leetcode27一样思路再往数组后面填充0class Solution {public: void moveZeroes(vector<int>& nums) { //移动0的思路: /* 先把0移除:双指针解决,和leetcode27一样思路 再往数组后面填充0 */ int

2022-03-14 15:15:33 1898

原创 Linux进程中的优先级的理解(PRI 和 NI)

文章目录优先级的基本理解为什么有优先级的概念查看进程的优先级对PRI和NI的理解用top命令更改已存在进程的nice:达到修改进程优先级总结优先级的基本理解cpu资源分配的先后顺序,就是指进程的优先权(priority)。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。为什么有优先级的概念这个其实很好理解:在操作系统的角度看,可用资源太少,而进程

2022-03-14 12:05:43 3348

原创 模拟实现C++中vector常用方法

文章目录前言vector的成员数据vector的默认构造函数vector的拷贝构造和赋值运算vector的迭代器vector的[ ] 和 size 和 capacityvector的resize和 reservevector的push_back和pop_backvector的insert和erase(会产生迭代器失效问题)前言要模拟实现前:我们最主要是熟悉使用vector容器先,基本的使用我在好早一篇文章有介绍vector的使用,有需要可以看看c++基础 STL 第一篇: (初识STL 和 vector

2022-03-13 17:48:35 991

原创 Linux中对进程的理解

文章目录再次谈谈进程的概念进程的PCB(task_struck)中到底有什么东西,如何理解这些属性再次谈谈进程的概念我们都知道,进程只不过是一个被加载到内存的一个可执行程序罢了,但是仅仅这么理解是不够的,进程,绝对不是就是一个被加载到内存的可执行程序;再次期间,我们需要理解,程序是谁把它加载到内存的?答案是操作系统;那么程序被操作系统加载到内存时候,是否需要对进程进行管理呢?答案也是肯定的,当然需要管理。那么进程一旦被操作系统管理,那么操作系统又是如何管理进程的呢?答案是:通过描述进程的各种属性,

2022-03-13 13:45:50 651

原创 模拟实现C++中string类的常用方法

文章目录前言1 实现一个简易版的string 类1.1 简易版string 类的成员1.2 简易版string 类的构造函数1.3 简易版string 类的析构函数1.3 简易版string 类的拷贝构造函数1.4 简易版的string 类的拷贝构造函数(新写法)1.5 简易版string 类的赋值运算符重载1.6 简易版string 类的赋值运算符重载(新写法)1.7 简易版的string 类的总代码前言首先,你需要了解和使用过string类,才知道我说的是什么,这里并不实例string类如何使用,因

2022-03-11 15:43:59 1732

原创 二分查找算法【配合经典力扣题目讲解】(C++实现)

文章目录1 二分查找的基本原理2 二分查找算法的两种写法2.1 左闭右闭的二分查找写法2.2 左闭右开的区间的写法3 四道经典力扣的二分算法的题目3.1 有效的完全平方数3.2 x 的平方根3.3 搜索插入位置3.4 在排序数组中查找元素的第一个和最后一个位置1 二分查找的基本原理二分查找的使用情况:对于已经有序的数据来说,二分查找可以极大的提高查找效率,我们知道查找的本质就是排除,为什么二分查找可以右极高的查找效率呢?本质就是一次查找就可以排除一半无效的数据,这就是它高效的原因之一;从时间复杂度度的

2022-03-08 21:42:31 1076 1

原创 415. 字符串相加【大数相加的问题】(C++实现)

1.题目2.思路其实我们这种字符串的大数相加,不可以直接使用stoi,或者stoll这种函数去相加,因为随时有可能越界的;我们其实需要的是模拟我们计算加法的过程就行;1.定义两个尾指针,指向num1,nums2的最后一个数字,让这两个数字相加,并把相加的结果记录下来;但是我们还需要考虑多一个问题,就是num1和nums2的长度问题,假如哪个比较短的,我们就用0给它不上去就可以;至于如何判断短的,只要有尾指针越界了,另一个没有越界,那么越界的就表示该字符串比较短;2.假如相加产生进位就处理它,只

2022-03-02 16:36:37 1475 3

原创 剑指 Offer 67. 把字符串转换成整数(C++实现)

1.题目2.思路这道题只要把各种情况想清楚就行:去掉字符串前面的空格,只要遍历字符,碰到空格,直接跳过就行,但是注意跳过空格时候,判断是否下标会越界,越界直接返回;判断前面第一个字符是否为+ - 正负号,是的话,也直接跳过,为了使得最终结果是可以表示正负号的效果,我们可以提前设置一个变量来保存正负号的值,+号用1表示,-号用-1表示,最终结果乘于该变量即可;判断是否为数字,假如字符不是数字,那么直接返回即可判断是数字时候就拼接结果,但是,拼接结果时候,要判断越界问题:如何判断呢?我们可以通

2022-03-02 15:58:11 613 1

原创 Linux中gcc/g++ gdb make/Make 的基本使用和理解

1. gcc/g++的基本使用gcc和g++是两种编译器,也就是用来编译c/c++源文件的编译器,其中,gcc用来编译c语言,而g++用来编译c++;当然由于c++兼容c,所以说,g++也是可以编译c语言源文件的,但是我们不经常这么做;gcc和g++的使用没有区别,区别的地方就是编译不同的源文件;所以说,我们只要知道如何编译c语言的源文件,那么我们就会编译c++源文件了;也就是说gcc会使用,g++也会使用;gcc的一般选项使用:-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输

2022-03-01 16:46:53 2332 1

原创 linux中解决普通用户无法使用sudo指令的问题

我们在使用sudo命令时候,可能新的普通用户会无法使用该命令来提升权限;比如使用时候,会报错:解决办法:切换root用户身份用vim打开文件/etc/sudoers文件底行模式:set nu;设置行号找到100行左右的位置;在该100行下面添加和100行的一样内容,修改root为你的用户名;底行模式wq!退出即可;...

2022-02-22 18:42:59 2781

原创 Linux中yum相关操作和vim的相关操作

文章目录yum的基本使用vim的基本操作vim的配置方法yum的基本使用通过 yum list命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令只筛选出我们关注的包. 例如:yum list | grep lrzsz结果如下:lrzsz.x86_64 0.12.20-36.el7 @base;依次对应下面文字意思软件包名称: 主版本号.次版本号.源程序发行号-

2022-02-18 21:25:35 761

原创 剑指 Offer 04. 二维数组中的查找(C++实现)

文章目录1. 题目2.思路3.代码演示1. 题目2.思路首先我们要知道查找的本质就是排除,所以当你要查找一个数时候,你可以一个一个的查找,那么就说明你需要一个一个数的排除,你也可以一堆一堆的查找,这样就可以一堆一堆的排除;很明显,在排除的基础上, 谁排除得更多,那么就说明谁查找得更加快;所以:这道题思路一:直接遍历二维数组,一个一个数得查找,肯定能够找到数是否在这个二维数组中;当是这种效率极其低下,也就是说明排除得效率也很低,一个一个得排除;思路二:利用题目条件,提高算法的效率,题目说

2022-02-17 19:05:33 492

原创 C++11中Lambda表达式的基本用法和总结

前言对于Lambda表达式:其实本质就是一个函数,其用法也和函数差不多,只不过它和函数的区别在于,lambda表达式可以在函数里面定义,而函数不可以嵌套定义,并且在形式上也有一定的区别;一般我们把lambba表达式,当作一种匿名函数去使用,也就是说:这个函数是没有名称的;lambda的基本形式基本形式如下:[捕获列表](参数列表)->返回类型{函数体};int main(){ []{ cout<<"这是最基本的lambda表达式的形式"; }; return 0;

2022-02-16 10:59:18 2815 1

原创 对C++中的智能指针的理解和基本用法总结

智能指针的概述毫无疑问,智能指针相比于普通的裸指针(也就是我们直接用 new出来的对象的指针)更加智能,最明确的体现在于,可以自动帮你管理内存泄漏的问题,也就是说是,使用智能指针,不需要你手动去delete一个指针;简单的说:只能指针就是对普通的裸指针进行了一层包装,包装之后,就使得这个指针更加智能,能够自动在合适时间帮你去释放内存;C++标准库提供了四种智能指针的使用:std::auto_ptr; c++98就有的一种智能指针,但是现在被遗弃,完全被std::unique_ptr所取代;下面三

2022-02-08 12:55:18 2924 1

原创 Linux权限的理解和管理

文章目录shell命令以及运行原理Linux权限的理解root 用户和普通用户的切换修改文件属性权限修改文件拥有者和所属组shell命令以及运行原理Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:将使用者

2022-01-28 15:47:37 2800 1

原创 Linux基础指令的理解和使用

文章目录Xshell指令方式登录Linux服务器useradd passwd userdel 指令ls 相关指令 和 pwdXshell指令方式登录Linux服务器操作:ssh 用户名@公网IP地址;其中在xshell中粘贴的操作是:shift+insert;复制操作是: ctrl + insert;一般我都是用这个操作粘贴公网IP地址;上面操作回车后:会出现如下图:然后输入你的密码就可以登录成功了;useradd passwd userdel 指令由于Linux是多用户操作系统

2022-01-26 17:38:14 2644 6

原创 谈谈C++ 中深浅拷贝的问题

文章目录构造函数的潜在问题风险解决构造函数的潜在风险方案浅拷贝深拷贝构造函数的潜在问题风险对于成员变量是有指针类型的类来说,构造函数初始化成员时候,很容易就会出大问题;举个例子:class Car{public: Car(int price,const char* name):m_price(price),m_name(name) { }private: int m_price; char* m_name; //Car类有指针类型的成员变量};int main(){ cha

2022-01-25 12:11:15 1274

原创 【侯捷】C++内存管理从平地到万丈高楼(前11节学习笔记)

文章目录2 内存分配的每一个层面3 4个层面的基本用法4.基本构件之一new delete expression(上)5.基本构件之一newdelete expression(中)7.Array new8.placement new9.重载10.重载示例(上)11.重载示例(下)2 内存分配的每一个层面对于C++的应用程序来讲,我们一般有三种调用函数的方式来分配内存; malloc函数; new的相关操作符和函数 ; allocator的相关分配器;而从图我们也知道,每一层都是对下一层的

2022-01-20 18:48:40 1561 2

原创 计算机网络【TCP的序号 确认号详解 TCP三次握手 和 四次挥手】

初始TCP三次握手–建立连接在发送方和接收方方收发TCP数据之前,是需要先建立连接,那么就需要给双方一些信息来确定建立连接。也就是双方问个好,也就是三次握手。三次握手的过程大概就是:接收方想和发送方通信,那么接收方就会发送一个TCP请求报文过去,这个TCP 的SYN=1,ACK=0,而发送方收到了请求报文后,就会回应一个SYN=1,ACK=1,给接收方,表示发送方愿意和接收方建立连接,当接收方收到了发送方的响应报文后,那么接收方也会给会发送方一个响应报文:SYN=0,ACK=1,表示接收方收到了发送方的

2021-12-21 08:49:40 7709 8

原创 计算机网络【TCP的可靠传输 流量控制 拥塞控制 详解】

TCP可靠传输–停止等待ARQ协议为了保证TCP的可靠传输,也就是保证这个数据包一定会传输到给对方,早期的处理手段是使用了一种体制等待ARQ的方法去解决这个问题;在早期,发送数据包给对方时候,是发送一个包,等对方确认后才可以继续发送下一个包。为了保证可靠传输,要考虑多种情况;第一种情况,就是无差错的情况:A发送过去,B再发一个确认包回来;如此反复知道A发完;第二种情况,就是超时重传:A发送过去,B没有接收到,或者B接收到,没有回复确认包给A,此时,超过一定时间,A就会重传这个B没有收到的数据包

2021-12-17 19:17:26 1732 13

原创 计算机网络【UDP和TCP首部字段详解】

文章目录一 UDP详解二 TCP首部各个字段详解一 UDP详解在传输层中,有两个协议UDP和TCP,通常UDP都是比较简单的协议字段,因为UDP不需要面向连接,也就是说,发送UDP数据包过去时候,不需要先建立连接再发送,可以直接发送,并且UDP不保证可靠性,也就是说,发送数据包过去不保证对方是否收到,UDP的数据包不管这个;端口常见的端口号二 TCP首部各个字段详解TCP首部,相对于UDP首部比较复杂,UDP首部只需要8个字节就可以表达想要的意思。而TCP至少需要20个字节才可以

2021-12-15 18:23:21 8125 1

原创 计算机网络【IP数据包首部的各个字段详解】

一 网络层网络层首部–版本,首部长度,区分服务,总长度版本:就是指出IP数据包是什么版本;常见的版本就是0100 IPV4和 0110 IPV6;首部长度:整个IP数据包的首部长度,不包括数据部分;但是首部长度只用4个bit存储,表示最大值也是1111,即15;而我们实际上首部长度还需要乘于5才可以得到实际答案;假如首部长度为0101,也就是4,那么实际的首部长度为4×5=20;假如首部长度为1111,也就是15,那么实际的首部长度为15×5=60;常见的首部长度一般都是20字

2021-12-14 21:17:53 20075 7

原创 计算机网络基础(静态路由,动态路由,公网IP,私网IP,NAT技术)

一:静态路由和动态路由在说静态路由和动态路由前,我们需要来了解一下,如下网络,如何让各个计算机之间能够进行通信!!首先观察计算机0和计算机1的通信情况。我们发现计算机0处于192.168.1.0网段,计算机1处于192.168.2.0网段。它们是处于不同网段的,处于不同网段的计算机通信就需要通过路由器转发进行通信。而我们的路由器0就刚好直连连接到了192.168.1.0网段和192.168.2.0网段,所以计算机0和计算机1可以直接通过路由器转发进行通信。为什么从计算机0发送数据给你算计1时

2021-12-13 19:26:18 7364 6

原创 对C++中的静态类型,动态类型,静态绑定,动态绑定的理解

前言:要想真的理解C++中的虚函数调用过程,首先自然而然的要了解虚函数调用过程的表面现象,那么要了解它的表面现象就自然而然的不能不理解静态类型和动态类型,静态绑定和动态绑定的概念!其次才能更加深层次的探讨虚函数的调用原理,虚表!!!自出现继承后,就可以有基类指针或者引用指向派生类对象了,此时指针或者引用的类型就不在是简简单单的了!!因为这些概念设计到对函数的调用,到底是如何调用的基类的还是派生类的,如何调用函数也牵扯到虚函数如何调用的过程!理解清楚就很方便理解多态了,多态的最主要的原理还是虚函数表

2021-11-25 20:19:37 1755 10

原创 【Leetcode】二叉树专题(仅需【7道题】就可以带你入门二叉树基本玩法)

文章目录一 剑指 Offer 27. 二叉树的镜像剑指 Offer 27. 二叉树的镜像- - 思路- -(递归)二 剑指 Offer 28. 对称的二叉树剑指 Offer 28. 对称的二叉树- - 思路 - - (递归)三 剑指 Offer 55 - I. 二叉树的深度剑指 Offer 55 - I. 二叉树的深度- - 思路- - (递归)四 剑指 Offer 55 - II. 平衡二叉树剑指 Offer 55 - II. 平衡二叉树- - 思路- -(递归)五 100. 相同的树100. 相同的树

2021-11-16 19:28:15 1366 9

原创 剑指 Offer 59 - I. 滑动窗口的最大值(单调队列思路C++实现)

文章目录题目思路--单调队列题目题目链接:剑指 Offer 59 - I. 滑动窗口的最大值思路–单调队列这道题暴力解法时间复杂度度是 O(n*k);暴力的思路:定义两个指针,一个是窗口的最后一个值的指针 i,另一个是窗口的第一个值得指针 w;用 i 来遍历数组,同时判断窗口范围得最大值;然后 i++,继续判断窗口得最大值;直到 i 遍历完数组即可找出所有窗口得最大值,但是这样时间复杂度度是O(n * k);单调队列思路:搞两个指针w,i: w表示滑动窗口的弟一个指针;i一

2021-11-15 00:07:04 760 4

原创 【leetcode】二叉树的前序 中序 后序 遍历(迭代思路C++实现)

文章目录144. 二叉树的前序遍历前序遍历思路--迭代94. 二叉树的中序遍历前序遍历思路--迭代145. 二叉树的后序遍历后序遍历思路--迭代144. 二叉树的前序遍历题目链接:144. 二叉树的前序遍历前序遍历思路–迭代前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放⼊栈中,然后将右子树加⼊栈,再加⼊左左子树。为什么要先加⼊右子树,再加⼊左子树呢?因为这样出栈的时候才是中左右的顺序。(注意代码中空节点不⼊栈)/** * Definition for a binary

2021-11-14 15:15:56 1337 1

原创 【牛客网】KY11 二叉树遍历(C实现)

文章目录题目思路题目题目链接:KY11 二叉树遍历思路这是一道程序题,需要写出完整的主函数问题:大体思路是:先输入一堆字符串(满足要求的字符串),用这个字符串开始前序创建二叉树,当创建完二叉树时候,就开始中序遍历即可!具体细节:首先我们看到要求是长度不超过100字符;我们可以设定一个字符数组为100;同时要求多组输入字符串:那么我们可以使while(sanf("%s",str)){ }的方式进行;其次要求前序创建二叉树,那么我们需要一个创建二叉树的函数,设计返回值参数为 TreeNo

2021-11-14 11:18:27 1211

原创 【数据结构】二叉树递归遍历方式和常见的二叉树玩法

文章目录普通二叉树二叉树的遍历二叉树遍历代码实现理解递归遍历二叉树的调用过程求二叉树的结点个数普通二叉树我们之前讲过完全二叉树的应用:【堆的数据结构】,在次我们使用的是顺序表来存储完全二叉树;但是对于普通的二叉树,是不建议使用顺序表的结构来存储的,会浪费空间,所以,我们搞出了一个链式存储结构来存储普通二叉树;对于普通二叉树我们需要明白几点:普通二叉树的增删查改是没有任何意义的,因为普通二叉树增删查改的结构过于复杂,没有必要一定要用二普通二叉树的方式去增删查改;对于普通二叉树我们需要关注的问题

2021-11-13 17:07:58 1237 1

原创 【数据结构】堆 和 堆的应用TopK问题

二叉树的顺序存储结构普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。如上图所示,如果使用顺序存储的话(即用数据存储),此时,非完全二叉树是会有空间浪费的,而完全二叉树不会;有人说,直接把非完全二叉树的 4 ,5 的位置移到空出来的位置不就好了嘛?这样是不可以的,二叉树

2021-11-07 22:19:59 271 3

原创 155. 最小栈(C++实现)

文章目录题目思路题目题目链接:155. 最小栈思路设计两个栈,一个st,一个minSt;入栈:st用来正常入栈,同时给minSt入栈,minSt入st.top 和 minSt.top元素的最最小值;出栈:st出栈,minSt也出栈;因为它们是一一对应的;class MinStack {public: MinStack() { } stack<int> st; //存放正常放入的栈 stack<int> minSt; //存放最小

2021-11-04 22:02:06 610 3

C++中STL的基本用法总结

C++的STL string vector list stack queue set map 等常用的容器使用

2022-03-02

空空如也

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

TA关注的人

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