C/C++相关方法
记录了前期学习的一些语言方面的知识
John-s
学习使我快乐
展开
-
【C++】STL-unodered_map
学习hash map原创 2022-10-10 16:36:41 · 844 阅读 · 1 评论 -
【线程进程】互斥的问题
1、同一进程中线程之间的局部变量不会相互影响,不需互斥;对于成员变量由于是共享的,所以只要改变就需要互斥2、不同进程之间的变量不一样,互不影响,不需要互斥故需要互斥的有p1的x+=1与x+=2,以及p2中的x+=3与x+=4...原创 2021-05-15 09:16:49 · 645 阅读 · 0 评论 -
【网络基础】OSI分层
原创 2021-04-14 09:15:57 · 487 阅读 · 0 评论 -
【剑指offer栈】判断栈的压入弹出序列
描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)算法新建一个栈,将数组A压入栈中,当栈顶元素等于数组B时,就将其出栈,当循环结束时,判断栈是否为空,若为空则返回true.class Solution {public: bool IsPo原创 2021-04-03 00:52:02 · 305 阅读 · 0 评论 -
【C语言】转换表的概念-使用函数指针
转换表//转移表实现的两个步骤//①声明并初始化一个函数指针数组//②函数的声明在前代码例子//2021/04/21H:\C和指针练习\C和指针练习题\C和指针练习题.vcxproj#include <iostream>using namespace std;//转移表实现的两个步骤//①声明并初始化一个函数指针数组//②函数的声明在前//例如实现一个计算器double myAdd(double, double);double mySub(double, doub原创 2021-04-21 15:47:45 · 424 阅读 · 0 评论 -
作用域和链接属性,存储类型是什么,static和extern该怎么用?看这篇文章就够了
1. 什么是作用域?为什么要有作用域?作用域包含哪些?2. 什么是链接属性?为什么要有这个东西?有哪些链接属性?3. 是否在一些场景见过static,static何时使用?4. extern应该怎么用?5. 什么是变量的存储类型?变量的存储类型有哪些?原创 2021-04-12 17:10:10 · 1166 阅读 · 0 评论 -
【C语言】数组与指针-掌握了这些,数组和指针都是小case
数组名为一个指针常量(常量放在静态存储区),值为数组中第一个元素的地址。数组名的类型取决于数组元素类型,假设数组元素类型为int,数组名的类型为“指向int类型的指针”,也就是int *类型原创 2021-04-16 10:13:56 · 747 阅读 · 0 评论 -
【C语言】命令行参数学习笔记
命令行参数C程序的main函数有两个形参① argc:表示命令行参数的个数② argv:指向一组参数值如果程序需要访问命令行参数,需要在main函数声明时添加以下int main(int argc, char **argv)原创 2021-04-21 20:17:50 · 322 阅读 · 0 评论 -
【C语言】预定义符号
//C和指针练习题2021/04/28#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>#include <stdlib.h>int main(){ printf("%s\n", __FILE__); //打印文件名 printf("%d\n", __LINE__); //打印当前行号 printf("%s\n", __DATE__); //打印日期 printf("%s\n", __TIME__); //打印原创 2021-04-28 08:45:07 · 226 阅读 · 0 评论 -
【C语言】关于指针运算值得注意的细节,快来看看你都掌握了吗
文章目录1 指针运算规则1.1 算数运算1.1.1 指针 ± 整数小测试11.1.2 指针 - 指针小测试21.2 关系运算2 数组和指针1 指针运算规则指针运算分为①算数运算和②关系运算1.1 算数运算写在前面我觉得就把指针当作一种类型就ok,然后编译器做了一些特殊处理,就是这些算数运算规则。然后指针变量本身也是一个变量,变量有自己的地址以及初始化后变量有自己的值。1.1.1 指针 ± 整数指针 + 整数 (类型和原指针相同的)另一个指针①先看指针指向的类型②指针 + 整数的值为原创 2021-04-15 22:00:07 · 582 阅读 · 0 评论 -
【C语言】回调函数和链表综合练习
描述//编写一个通用目的的函数,遍历单链表,接受两个参数,1指向链表第一个结点的指针2指向回调函数的指针,回调函数接收单个参数,指向链表结点的指针代码//2021/04/23H:\C和指针练习\C和指针练习题\C和指针练习题.vcxproj#include <iostream>#include <time.h>using namespace std;class Node{ public: Node(int num) { data = num;原创 2021-04-23 10:37:59 · 279 阅读 · 0 评论 -
【C++】类模板继承使用
类模板继承使用template<class T>class uBase {public: uBase(){} ~uBase(){}public: virtual void GocAData(T data) = 0;};template<class T>class uChild : public uBase<T>{public: uChild() {} ~uChild(){}public: void GocAData(T data) {原创 2021-10-16 10:21:11 · 73 阅读 · 0 评论 -
【递归C++】无额外空间逆序栈
使用递归//2021/05/27H:\无额外空间的栈逆序-使用递归\无额外空间的栈逆序-使用递归.vcxproj#include <iostream>#include <stack>using namespace std;int getDownItem(stack<int>& s);void rStack(stack<int>& s);void printStack(stack<int> s){ if (s.e原创 2021-05-27 10:40:26 · 108 阅读 · 0 评论 -
【C++】对map的value进行排序
//2021/05/20H:\力扣遇到的题\map的一些操作\map的一些操作.vcxproj#include <iostream>#include <vector>#include <map>#include <algorithm>using namespace std;void printMap(map<string, int>& wordMap){ for (map<string, int>::iter原创 2021-05-20 21:21:55 · 412 阅读 · 0 评论 -
【算法】快速排序
//2021/05/10H:\笔试题\左神算法课\左神算法课.vcxproj#include <iostream>#include <time.h>#include <vector>using namespace std;void quick_sort(vector<int>& s, int l, int r){ if (l < r) { //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个原创 2021-05-18 16:27:07 · 95 阅读 · 0 评论 -
【力扣二叉树】993. 二叉树的堂兄弟节点
描述在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。思路想了半个小时,终于做出来思路就是找到每个值的深度和父亲结点,比较深度相同,父亲不同就是堂兄弟结点用一个结构体来包含深度和父亲用二叉树层序遍历原创 2021-05-17 22:03:40 · 122 阅读 · 0 评论 -
【力扣C++】回文链表的三种方案
方案一使用栈,将链表全部入栈,然后比较链表和栈顶,相同就出栈和链表向后移动时间复杂度:O(n)空间复杂度:O(n)class Solution {public: bool isPalindrome(ListNode* head) { ListNode* tmp = head; if (!tmp || !tmp->next) return true; //开辟一个栈 stack<原创 2021-05-12 20:50:18 · 377 阅读 · 2 评论 -
【算法笔记】桶排序
算法代码//2021/05/11H:\笔试题\左神算法课\左神算法课.vcxproj#include <iostream>#include <vector>#include <time.h>#include <math.h>using namespace std;//取某一位的数字,1就是个位, 2就是十位int getDigit(int num, int d){ return (int)(num / (pow(10, d - 1))原创 2021-05-12 10:33:43 · 59 阅读 · 0 评论 -
【C++】比较器的实现,使用lambda
代码lambda表达[](const Student& a, const Student& b) {return a.m_id < b.m_id; }//2021/05/11H:\笔试题\左神算法课\左神算法课.vcxproj#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;clas原创 2021-05-11 16:39:04 · 664 阅读 · 0 评论 -
【算法笔记】归并算法来求解数组中的逆序对个数
归并算法代码//2021/05/10H:\笔试题\左神算法课\左神算法课.vcxproj#include <iostream>using namespace std;int Merge(int* buf, int L, int M, int R);//归并排序int Sort(int* buf, int left, int right){ if (left == right) return 0; int middle = left + (right - left)/2;原创 2021-05-10 19:48:31 · 296 阅读 · 0 评论 -
【算法笔记】插入排序代码
插入排序//左神算法课2021/05/10#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>using namespace std;//数组元素的交换void myswap(int* buf, int i, int j){ buf[i] = buf[i] ^ buf[j]原创 2021-05-10 11:21:29 · 632 阅读 · 0 评论 -
【剑指offer】数值的整数次方
描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。代码class Solution {public: double q_power(double b, int n) { if (n == 0) return 1.0; double ret = q_power(b, n/2);原创 2021-05-06 19:31:28 · 98 阅读 · 0 评论 -
【剑指offer字符串】JZ45扑克牌顺子
描述现在有五张扑克牌,我们需要来判断一下是不是顺子。有如下规则:A为1,J为11,Q为12,K为13数据中的0可以看作任意牌如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。例如:给出数据[6,0,2,0,4]中间的两个0一个看作3,一个看作5 。即:[6,3,2,5,4]这样这五张牌在[2,6]区间连续,输出true数据保证每组5个数字,每组最多含有4个零代码class Solution {public: bool IsContinuou原创 2021-04-23 20:17:59 · 88 阅读 · 0 评论 -
【剑指offer字符串】JZ43左旋转字符串
描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!代码时间复杂度:O(n)空间复杂度:O(n)class Solution {public: string LeftRotateString(string str, int n) {原创 2021-04-23 19:41:14 · 91 阅读 · 0 评论 -
【剑指offer动规】JZ30 连续子数组的最大和
描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).算法典型的动态规划。array[n]代表以当前元素为截止点的连续子序列的最大和,如果array[n-1]>0,array[n]=array[n]+array[n-1],因为当前数字加上一个正数一定会变大;如果array[n-1]<0,array[n]不变,因为当前数字加上一个负数一定会变小。使用一个变量max记录最大的dp值返回即可。class S原创 2021-04-20 21:56:35 · 182 阅读 · 0 评论 -
【剑指offer字符串】JZ2 替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。实现class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 */ string repla原创 2021-04-19 09:14:50 · 342 阅读 · 0 评论 -
【剑指offer】JZ6旋转数组的最小数字
描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。算法因为是旋转数组,找到比当前值小的位置就是最小值class Solution {public: int minNumberInRotateArray(vector<int> rotateArray) { int l = rotateArray.size();转载 2021-04-15 10:24:47 · 430 阅读 · 0 评论 -
【剑指offer二叉树】JZ58 对称的二叉树-构建辅助函数
描述JZ58 对称的二叉树请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。算法辅助函数 判断bool isEqual(TreeNode* pRoot1, TreeNode* pRoot2);base case首先判断:pRoot1 和 pRoot2 都为nullptr ,则是相等, 返回true第二步: 其中一个为nullptr, 则不相等, 返回false返回第三步: 结点的值是否相等 &&原创 2021-04-12 08:32:06 · 597 阅读 · 0 评论 -
【力扣算法】二叉搜索树(BST)的增删查改-450、701、700、98
二叉搜索树(BST)的增删查改-450、701、700、98原创 2021-04-09 08:39:04 · 848 阅读 · 0 评论 -
【力扣算法】538. 把二叉搜索树转换为累加树--二叉树中序遍历套路
538. 把二叉搜索树转换为累加树--二叉树中序遍历套路原创 2021-04-08 15:24:27 · 392 阅读 · 0 评论 -
【力扣算法】230. 二叉搜索树中第K小的元素--二叉树中序遍历套路
二叉搜索树中第K小的元素--二叉树中序遍历原创 2021-04-08 14:56:44 · 487 阅读 · 0 评论 -
【力扣算法】掌握套路你就赢了-半小时学会重建二叉树(前+中、中+后)
重建二叉树(前+中、中+后)原创 2021-04-08 11:03:31 · 626 阅读 · 0 评论 -
【力扣算法】234. 回文链表-实现 O(n) 时间复杂度和 O(1) 空间复杂度
234. 回文链表-实现 O(n) 时间复杂度和 O(1) 空间复杂度原创 2021-04-08 09:09:06 · 610 阅读 · 0 评论 -
【力扣算法】25. K 个一组翻转链表--细节很关键
题目描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。算法细节1、该题使用辅助函数reverse对区间[a, b)之间的结点进行反转cur == b的时候退出,注意该函数返回pre,所以反转的区间是左开右闭细节2、在函数reverseKGroup内,ref指向[a, b)反转后的结点,所以指向的b前一个结点,再让a的next指向reverseKGroup(b,原创 2021-04-08 08:35:12 · 392 阅读 · 0 评论 -
【力扣算法】92.反转链表II--简单清晰的递归算法-妙啊
题目描述给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。算法参考:labuladong算法小抄//结点类型class ListNode{ int val; ListNode* next;}1、首先对整个链表反转ListNode* reverse(ListNode* head){ if(head->next == nullptr)原创 2021-04-06 21:41:13 · 645 阅读 · 0 评论 -
【算法笔记】BFS算法--解决一类二叉树层序打印题
参考:labuladong算法小抄BFS 的核心思想就是把一些问题抽象成图,从一个点开始,向四周开始扩散。写 BFS 算法都是用「队列」这种数据结构,每次将一个节点周围的所有节点加入队列。BFS 相对 DFS 的最主要的区别是:BFS 找到的路径一定是最短的,但代价就是空间复杂度比 DFS 大很多。通用框架:// 计算从起点 start 到终点 target 的最近距离int BFS(Node start, Node target) { Queue<Node> q; // 核心原创 2021-04-06 20:13:47 · 661 阅读 · 0 评论 -
【算法笔记】基本数据结构遍历模板
今天看了labuladong写的算法讲解,对数据结构方面的知识有了更加全局性的认识,收获颇丰,参考地址:https://labuladong.gitbook.io/algo/bi-du-wen-zhang/xue-xi-shu-ju-jie-gou-he-suan-fa-de-gao-xiao-fang-fa我们日常生活中的各种模型能够抽象出不同的数据结构,总的来说就是两种:线性结构和非线性结构其中对于任何数据结构通用的操作就是:增 删 查 改这就对数据结构中的元素进行遍历和访问各种数据结构的遍历原创 2021-04-06 19:14:11 · 491 阅读 · 0 评论 -
【算法笔记】二分法的模板
二分法1、查找一个数int binary_search(int[] nums, int target) { int left = 0, right = nums.length - 1; while(left <= right) { int mid = left + (right - left) / 2; if (nums[mid] < target) { left = mid + 1; } else i原创 2021-04-06 16:53:45 · 810 阅读 · 0 评论 -
【剑指offer栈-树】二叉搜索树的后序遍历序列
描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树)算法使用递归时间复杂度O(logn)空间复杂度O(1)class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { if (!sequence.size()) return false;原创 2021-04-04 10:37:19 · 385 阅读 · 0 评论 -
【剑指offer栈】包含min函数的栈-空间换时间经典题目
描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。算法设原栈为normal新建一个相同大小的栈为minval,每次normal.push(value)时(设push值为value)判断normal.top()与value之间大小关系,若小于value,则执行minval.push(normal.top())每次pop对两个栈都执行空间复杂度:O(n)时间复杂度:O(1)class Solution {public: stac原创 2021-04-04 10:06:10 · 449 阅读 · 0 评论