自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于死锁问题的详解

用图来分享下锁的相关知识

2022-08-08 17:21:11 196 1

原创 AVL树四种旋转的详细图解

AVL树的四种旋转的图解

2022-08-06 08:54:25 546

原创 可重入函数详解

详细讲解了可重入和线程安全

2022-07-22 19:46:32 902

原创 定长内存池详解

定长内存池的详解

2022-07-22 16:18:04 223

原创 Linux下的共享内存

共享内存的使用

2022-07-18 12:15:16 1609

原创 C++模板初阶

模板函数的初阶介绍

2022-07-15 20:50:42 430

原创 二叉树代码区

二叉树的代码

2022-06-26 14:53:24 130

原创 快速排序的递归和非递归

快速排序的递归和非递归

2022-06-17 15:14:49 54

原创 C++程序调用C的静态库和C程序调用c的静态库

C++程序调用C的静态库和C程序调用c的静态库

2022-06-10 15:14:20 389

原创 从前序与中序遍历序列中构造二叉树

力扣——题目运用迭代的方法去求解/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr)

2022-05-28 11:17:04 65

原创 二叉搜索树与双向链表问题

二叉搜索树与双向链表_牛客题霸_牛客网/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: TreeNode* Convert(TreeNode* pRootOfTree) { i

2022-05-28 08:59:22 54

原创 力扣-找公共祖先问题

力扣-找公共祖先问题方法1:看是不是在节点的左右节点,如果在,就说明root即使节点class Solution {public: bool Find(TreeNode* root, TreeNode*x)//找节点 { if(root==nullptr) return false; if(root==x) return true; return Find(root->left,x)||Find(root-&gt

2022-05-27 13:57:31 116

原创 幸运的袋子-牛客网

#include<iostream>#include<vector>#include<algorithm>using namespace std;int getLuckyPacket(vector<int> arr,int size,int pos,int sum,int mulit){ int count=0; for(int i=pos;i<size;i++) { sum+=arr[i]; .

2022-05-15 23:02:29 102

原创 牛客网之参数解析问题

参数解析__牛客网写一个暴力点写法#include<iostream>#include<vector>#include<string>using namespace std;int main(){ vector<string> ans; string str; getline(cin, str); int begin = 0;// int end = 0; int sz = str.s

2022-05-14 22:19:12 127

原创 命名管道的学习

key_t key = ftok(PATH_NAME, PROJ_ID);if(key < 0){perror("ftok");return 1;}

2022-05-02 20:33:40 144

原创 Linux 基础知识详解

今天我们来谈论下优先级的概念,什么是优先级等。概念:就是CPU分配资源的先后顺序,也就是指挥进程的优先权限。优先权高的进程有优先执行的权力,优先级越高的进程,起先被执行。现在我们看下,我们怎么查看进程的。当你在运行一个进程的时候,用命令 ps -al 查看是优先级的,其中PRI是优先级,其值越小,优先级越高,NI是nice值,其作用就是用来调整优先级的,如果NI是负数,会让其优先级增加,如果是正数,就会让优先级下降,其NI值的取值范围是-20-19;PID是这个进程的编号,PPID是父进程的

2022-04-04 13:09:06 429

原创 进程的概念(详解)

首先我们来讨论下,进程和程序的区别,有些人说进程就是存储在内存的程序,其实这样的说法是不正确的,其实进程是程序加PCB(数据管理模块),就是进程信息被存放在一个加控制模块的数据结构中,可以理解为进程属性集合。接下来我们来学习下一个重要的函数:fork函数fork函数其作用就是创建一个子进程,首先我们创建一个子进程的方法有两种,一个是cmd or run command fork ,在操作系统的角度上讲,上面建立的进程方式没有什么不同。fork的本质是创建进程,那么它是不是一定会导致系统里多一个进

2022-04-03 11:51:19 414

原创 手撕vector

#pragma once#include<iostream>using namespace std;namespace WGX{ template<class T> class vector { public: typedef T* iterator; typedef const T* const_itreator; vector() :_start(nullptr) , _finsh(nullptr) , _endofstor.

2022-04-01 17:16:51 386

原创 vim的基本用法

现在目录下面创建一个文件,我们现在创建一个test.c文件然后用vim文件打开进入编辑界面,vim最重要有三种模式,一种是命令模式,一种是低行模式,插入模式,所以我们现在要掌握怎么进行三种模式的切换。首先我们一打开vim默认的模式就是命令模式,如果我么要进入低行模式的话,按shift+:,进入低行模式我们可以按w+q,来进行退出,其中w是保存,q是推出,还有一点如果加!就是强制的意思。我们怎么从命令模式进入插入模式呢,那么我们按“i”就可以了,在插入模式里面我们可以输入你想输入的东西。但有一

2022-03-27 12:19:52 666

原创 电话号码组合(力扣)

这样的题目其实就是提多叉树的遍历,一直向下,然后从左向右遍历。class Solution { string arr[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//把所有的组合列出来public: void _letterCombinations(const string& digits,size_t i,string Cominstr,vector<string>& s...

2022-03-25 12:50:37 335

原创 C++之string源代码详解

stiring 相比于c的char 要方便多了,string里有很多的库函数,现在我们来把库函数的实现讲解下#include<iostream>#include<string.h>#include<assert.h>using namespace std;namespace WGX//建一个空间域{ class string { public: typedef char* iterator;//迭代器 typedef const cha

2022-03-19 14:01:51 3613

原创 c++之模板初阶

目录1.泛型编程2 函数模板3 类模板1.泛型编程怎么去实现一个通用的交换函数呢,如果我们要交换int,或者double,再或者char,如果这样,我们是不是要写三个不同的函数,这样就很鸡肋,很多代码是复用的,怎么想着去简化它呢,于是大佬们就想到了一个方法。下面是重复的函数void Swap(int& left, int& right){int temp = left;left = right;right = temp;}void Swap(double

2022-02-22 10:57:50 506

原创 C++之引用详解

引用的概念:引用没有重新定义一个变量,只是给变量取了个别名,编译器不会给引用名重新开辟空间,它和它的应用变量共同使用一个内存空间。类型&引用变量名==引用实体;void TestRef(){int a = 10;int& ra = a;//<====定义引用类型printf("%p\n", &a);printf("%p\n", &ra);}引用的特性:1.引用在定义时必须初始化.2.一个变量可以有多个引用3.引用一旦引用了一个实体

2022-01-14 11:23:00 278

原创 牛客网—二叉树遍历(C语言)

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入描述:输入包括1行字符串,长度不超过100。输出描述:可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。示例1输入:abc##de#g##f###

2022-01-14 01:07:43 274

原创 力扣—对称二叉树(C语言)

主要的思想就是,看看其左子树的值和右子数的值相不相等,如果相等就递归后面的左子树和右子树。/** * Definition for a binary tree node. * struct TreeNode {//创建的结构体 * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */bool _isSymmetric(struct TreeNode* root1,struct...

2022-01-14 01:01:50 321

原创 力扣-平衡二叉树(C语言)

给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1 。左子树的高度和右子树的高度相差不能大于1,所以只需要求出做左子树的深度和右子树的深度,再看看它们相差是不是大于1。代码实现**e. * struct TreeNode {//创建一个结构体 * int val; * struct TreeNode *left; * struct TreeNode *...

2022-01-14 00:54:55 115

原创 力扣(反转二叉树)C语言

如图所示,可以利用前序遍历实现这个功能。void _invertTree(struct TreeNode* root){ if(root==NULL) { return NULL; } struct TreeNode*tmp=root->left; root->left=root->right; root->right=tmp; _invertTree(root->left); _in...

2022-01-11 13:46:47 296

原创 力扣(两数相加)C语言

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头如图所示:解题思路,如果两个链表的长度都相等,那比较简单,直接加就可以了,难的是长度不相等,怎么处理这不相等情况,有一种方法是,将短的后面补零,再进行相加。/** * Definition for singly-linked list. * struct

2022-01-11 10:44:49 330

原创 C++之默认参数详解

下面将介绍另一项新的内容--默认参数。默认参数指的是当函数中调用中缺省了实参自动使用一个值,比如下面程序:void Print(int a=1){ cout<<”a的值:“<<a<<endl;}此时如果不给参数,打印的就是1,如果给了其他的数,就打印其他的数。其实,默认参数可以分为两种,一种是全缺省参数,一种是半缺省参数。即全缺省参数就是所有参数都缺省了,都有默认值,半缺省就是一部分有默认值,一部分没有。首先我们先来我们来看下全缺省的情况:

2022-01-08 13:02:48 4577

原创 排序之选择排序(图解)

选择排序的思想其实比较简单,每循环一遍,就找到一个最小的或最大的,找到最小的,就和最左边的换,找到最大的就和嘴右边的换,如下图所示:此图是找小的,每次遍历一遍就把找到最小的放在左边,直到结束。其实我们可以优化代码,同时找到最大的喝最小的,把最大的放在右边,最小的放在左边,如此循环下去。void selectSort(int* a, int size){ //选择排序的思想就是每一次找到一个最大的,放到最后面,找到一个最小的放到最前面 int left = 0;//定义最左边的下标 in

2022-01-06 17:26:08 2974 2

原创 排序之希尔排序(图解)

为什么希尔排序会出来,主要是为了弥补插入排序的缺点,插入排序它的最好的时间复杂的为O(n),但如果一开始是一个逆序出来让我们排,那时间复杂度就是O(n^2)了,因为每次排,都会移动所经过的数。希尔排序其实也是插入排序的变形,就是在做最后一部插入排序之前,做一个预排序,使它先接近有序,然后再排。void shellSort(int* a, int size){ int gap = size; while (gap > 1) { gap = gap / 3 + 1; f.

2022-01-06 14:14:18 1376

原创 排序之插入排序(图解)

插入排序就像我们打扑克一样,在理排的时候,如果有新牌,就会一个一个比较,看谁的大。代码如下#include<stdio.h>#include<assert.h>void Swap(int* px, int* py)//交换数据{ int tmp = *px; *px = *py; *py = tmp;}MyPrint(int* a, int sz)//打印数组{ for (int i = 0; i < sz; i++) { prin.

2022-01-06 08:50:39 300

原创 求链式二叉树第K层的结点数

之前我们写过怎么求叶子结点的个数,叶子结点个数就是求它的左子树的叶子结点,加上柚子树的叶子结点,依次递归下去,可能最难得就是跳出递归的条件,由于是求叶子结点,所以当它的左右子树都为空的时候就返回1,如果是空的树就返回零。同样的,我们要找K层的节点数,所以我们每遍历一层就k-1最后当k==1的时候,就到了第K层了,所以这就是我们的终止递归的条件。#include<stdio.h>#include<stdlib.h>#include<assert.h>typede

2021-12-23 15:58:40 1711

原创 判断单值二叉树的详解与实现(c语言)

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回true;否则返回false,如图所示:那如何证明它是单值二叉树呢,我们是不是可以把大问题化成小问题来解决。比如,我们先比较头结点和左右子结点的值。然后依次往下递归。bool isUnivalTree(struct TreeNode* root){ if(root==NULL)//如果为空就返回真 { return true; } if(r...

2021-12-22 16:54:55 627

原创 (力扣)循环队列的实现与详解(C语言)

循环队列是一种线性数据结构,其操作表现基于FIFO(先进先出)原则,并且队尾被连接在队首之后以形成一个循环。它也被称之为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间,在普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即是在队列前面仍有空间。但是在使用循环队列,我们能使用这些空间去存储新的值。如图所示,可以形象的理解为这样的队列。但我们在实现循环队列的时候,可以用数组实现,也可以用链表来实现,那我们接下来就先试试怎么用数组来实现这个循环队列。此时我..

2021-12-21 17:12:18 871

原创 力扣(复制带随机指针的链表)(C语言)

题目:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> ...

2021-12-09 14:35:55 153

原创 快速排序的递归解法(C语言)

快速排序在众多排序正如它的名字一样,速度是比较快的相对于其他的排序快速排序的基本思想是:从数据中取一个数作为基数,一般我们在选基数的时候,最好选最左边或最右边的数,同时从左边和右边同时遍历数组,如果要排升序,从右边往左边遍历的找小于基数的数,从左边往右边遍历的找大于基数的值,然后两个位置就互换,从而就把大的往右边甩,小的往左边甩,于是就完成了单趟的快速排序,其平均的时间复杂度为O(nlog n)int GetMid(int*a, int left, int right)//为了避免去最小的值做

2021-12-06 13:55:56 1375 1

原创 层序遍历详解(c语言)

之前讲过的中序遍历前序遍历、后序遍历,其中都是用的是递归来解决的,但我们的层序遍历它的特点是,先遍历第一层的,然后再遍历第二层的,依次下去,所以在这里我们想到的是队列,队列的特点是先进先出,所以我们运用对列来实现这个问题#include<stdio.h>#include<stdlib.h> //头文件#include<assert.h>#include<stdbool.h>struct BinaryTreeNode;typedef struc

2021-12-06 10:24:41 2491

原创 链式二叉树K层结点个数问题

手动建二叉树以前就有。现在只讲实现这个功能的接口函数。int BinaryTreeKSize(BTNode*root,int k){ if (root == NULL) { return 0; } if (k ==1) { return 1; } if (k < 1) { return 0; } return BinaryTreeKSize(root->left, k - 1) + BinaryTreeKSize(root->right, k - 1

2021-11-29 10:51:04 79

原创 链式二叉树求结点的问题

在之前已经写了求叶子结点的个数,其实两者相差不多,只是求叶子结点跳出函数的要求不一样,当孩子的左右结点都为空的时候,返回1,求结点个数就不一样,当节点不为空就返回1,总体思想就是,结点个数为左孩子加右孩子再加1,这个1就是加的自己的个数。代码如下#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>typedef int BTDataType;typedef struct BinaryTr

2021-11-29 10:11:52 288

空空如也

空空如也

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

TA关注的人

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