自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java基础语法(一)

修饰符 返回值类型 方法名称(参数列表) {方法体代码;返回值;注意事项】:修饰符:现阶段直接使用固定搭配。原因:因为当前所有的方法 写完之后 会在main方法中调用,因为main方法是public static的。静态的main函数里面只能调用静态的方法。方法名字:采用小驼峰命名。在Java中,方法必须写在类当中。在Java中,方法不能嵌套定义。在Java中,没有方法声明一说,你的方法定义在main的上面或下面都无所谓。## 10.2 实参和形参的关系。

2023-07-24 12:00:44 202

原创 类和对象(中)

1.类的6个默认成员函数任何一个类在我们什么都不写的情况下,都会自动生成下面6个默认成员函数。class Date {};2.构造函数2.1概念构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。2.2特性构造函数并不是开空间创建对象,而是初始化对象。其特征如下:函数名与类名相同。无返回值。对象实例化时编译器自动调用对应的构造函数。构造函数可以重载。class D

2022-02-27 18:51:30 152 3

原创 类和对象(上)

1.类的定义class className{ //类体:由成员函数和成员变量组成 }; //一定要注意后面的分号class为定义类的关键字,className为类的名字,{}中为类的主体,注意类定义结束时后面分号。类中的元素称为类的成员,类中的数据称为类的属性或者成员变量,类中的函数称为类的方法或者成员函数。类的两种定义方式:声明和定义全部放在类体中,注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。class Person{public:

2022-02-27 18:38:52 122

原创 指针空值nullptr(C++11)

在良好的C/C++编程习惯中,声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。如果一个指针没有合法的指向,我们基本都是按照如下方式对其进行初始化:void TestPtr(){ int* p1 = NULL; int* p2 = 0;}NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:#ifndef NULL#ifdef __cplusplus#define NULL 0#else#def.

2022-02-27 18:29:16 716

原创 auto关键字(C++11)

1.auto简介C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。#include <map>#include <string>int main(){ int a = 10; auto b = a; //类型声明成auto,可以根据a的类型自动推导b的类型 map<string,string> m;

2022-02-27 18:26:30 467

原创 Linux用户操作及热键

linux热键ctrl+c立刻结束当前程序ctrl+d有exit的意思,也象征键盘的输入结束tab命令自动补全(重要),例如你想打开一个test的文件夹,你可以直接输入t后再输入tab,可以直接补全文件夹名**ctrl+insert(可能还需要加fn)**复制**shift+insert(可能还需要加fn)**粘贴linux用户操作adduser添加用户需要在root权限下使用使用示例:adduser test(创建一个名为test的用户)passwd修改

2022-01-27 11:58:45 1092 4

原创 Linux权限

shell命令以及运行原理Linux权限的概念从root用户切换到普通用户可以输入exit或者ctrl+d。root拥有最高权限:同时,su 【username】可以在普通用户之间进行切换:有时需要sudo提升权限但我们可能在有些时候,只有一条或几条指令需要暂时性使用root权限,也就是我们有临时权限提升的需要,这时我们可以在我们的指令前面加上sudo指令,就可以以root权限执行这条指令,但需要用户的密码和用户的root权限信任Linux权限

2022-01-27 11:57:22 1018

原创 Linux下的基本指令

01.ls指令ls附件一些参数ls -l 显示文件的详细信息(可简写为ll)(这些信息代表的含义我们在后面介绍)ls -a 可以显示隐藏文件其中,文件前面带点的都是隐藏文件,而在每个目录新创建,都会自动带上两个隐藏目录.(一点)…(两点),其中一点代表当然路径,两点代表上一级路径所以,我们可以通过ls …查看上级路径ls -R 递归列出所有子文件夹下的文件(递归列出)02.pwd命令03.cd指令举例:04.touc

2022-01-27 11:53:36 1212

原创 【C++基础】 extern C

有时候在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加 extern "C" ,意思是告诉编译器,将该函数按照C语言规则来编译。比如我写一个程序,其中某一段程序想用别人写好的程序,这时我们可以使用静态库/动态库。静态库/动态库的创建参考博客在VS2019中,创建空项目(不要创建静态库项目):一定要把代码拷贝到这个工程目录下,再去添加到工程:然后右击“项目”,选择“属性”:在此处将“配置类型”改为静态库:然后重新生成解决

2022-01-07 10:09:01 598 5

原创 [C++] 引用

目录引用的概念引用的特性1.引用在定义时必须初始化2.一个变量可以有多个引用3.引用一旦引用一个实体,在不能引用其他实体引用的应用1.引用作参数2.引用作返回值3.常引用引用的概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。类型& 引用变量名(对象名) = 引用实体int main(){ int a = 10; int& b = a; cout << a << en

2021-11-29 09:36:01 327

原创 [C++基础] 函数重载使用和函数重载的原理

目录1. C++函数重载1.1 函数重载的概念2. C++支持函数重载的原理1. C++函数重载在我们日常对话中,一个词可以有多种含义,人们可以通过对话的上下文来确定该词的真实含义,即该词被重载了。1.1 函数重载的概念函数重载:是函数的一种特殊的情况,C++允许在同一作用域中声明几个功能相似的同名函数,这些同名函数的形参列表(参数个数 、参数类型、参数顺序)必须不同(至少三个中有一个不同)。int Add(int x, int y){ return x + y;}double

2021-11-27 20:16:32 795 2

原创 [C++基础] 缺省参数

目录缺省参数的定义缺省参数的分类1.全缺省参数2. 半缺省参数缺省参数的定义缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用默认值,否则使用指定的实参。void func(int a = 10){ cout << a << endl;}int main(){ func(); func(20); return 0;缺省参数的分类1.全缺省参数//所有的参数都给了缺省值(即为初始值)void Func1

2021-11-25 22:21:18 665 1

原创 [C++基础] 命名空间namespace的了解和使用

这里写目录标题1.C++关键字2.命名空间2.1命名空间的定义2.2命名空间的使用3.C++输入&输出4.缺省参数5.函数重载6.引用7.内联函数1.C++关键字2.命名空间命名冲突问题:我们自己定义的变量、函数可能跟库里面重名冲突进入公司项目组后,做的项目通常比较大,多人协作,可能命名冲突C语言没有办法很好的解决这个问题C++提出了一个新语法:命名空间2.1命名空间的定义命名空间定义出来的是一个域//定义了一个叫name_s的命名空间namespace name_s{

2021-11-24 20:35:20 731 8

原创 [数据结构与算法] 归并排序

目录归并排序1.概念2.算法原理3.动态演示4.代码归并排序1.概念归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法,归并排序对序列的元素进行逐层折半分组,然后从最小分组开始比较排序,合并成一个大的分组,逐层进行,最终所有的元素都是有序的。2.算法原理3.动态演示4.代码void _MergeSort(int* a, int left, int right, int* tmp){ //递归终止条件 if (left >= right) { retur

2021-11-22 11:26:50 3720 3

原创 [数据结构与算法] - 快速排序

目录快速排序:动态演示:方法:版本1:hoare法版本2:挖坑法版本3:前后指针法总代码:快速排序:基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。下面介绍一下优化代码:int GetMidIndex(int* a, int left, int right){ //int mid = (left + right) / 2; int mid = left + ((right - left

2021-11-19 18:23:05 155 2

原创 [数据结构与算法] - 排序 - 直接选择排序

直接选择排序代码(瑕疵版)比如这个数组,26 2 5 3 9 4 8 5 1 7,当begin与maxi重合时,maxi就会换到后面去void SelectSort(int* a, int n){ int begin = 0, end = n - 1; int mini = begin, maxi = begin; while (begin < end) { for (int i = 0; i <= end; ++i) { if (a[i] < a[mi

2021-11-15 23:31:33 391

原创 [数据结构与算法] - 排序 - 希尔排序

希尔排序步骤:分组预排序,整体接近有序直接插入排序处理经过gap分组后数据的处理方式:方式一:先处理紫色组,再处理红色组,最后处理蓝色组void ShellSort(int* a, int n){ //按gap分组数据进行预排序 int gap = 3; //一组一组排 for (int j = 0; j < gap; ++j) { for (int i = j; i < n - gap; i+=gap) { int end = i; int

2021-11-15 22:53:20 542

原创 [数据结构与算法] - 排序 - 直接插入排序

直接插入排序当插入第 i (i>=1)个元素时,前面的 array[0],array[1],…array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较。找到插入位置将array[i]插入,原来位置上的元素顺序后移直接插入排序的特性总结:元素集合越接近有序,直接插入排序算法的时间效率越高时间复杂度:O(N^2)空间复杂度:O(1),它是一种稳定的排序算法稳定性:稳定单趟排序接下来介绍插入排序的单趟排序:比如

2021-11-15 22:40:28 633

原创 [LeetCode] - 20. 有效的括号

题目链接题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。s 仅由括号 ‘()[]{}’ 组成代码:typedef char STDataType;typedef struct Stack{ STDataType* a; int top; int capacity;}ST;void StackInit(ST* ps);void Sta

2021-11-14 11:34:41 4089

原创 [Leetcode] - 141. 环形链表

题目链接题目:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。思路:使用快慢指针slow 和 fast 指向链表的开始,slow 一次走一步,fa

2021-11-13 21:01:05 79

原创 [LeetCode] -160. 相交链表

题目链接题目:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。问题:判断两个链表是否相交?如果相交,求交点。思路:思路1:暴力求解 - 穷举依次取A链表中的每个节点跟B链表的所有节点比较,如果有地址相同的节点,就是相交,第一个相同的交点。时间复杂度为O(N^2)思路2:要求优化到O(N)尾节点相同就是相交,否则就不想交。求交点: 长的链表先走(长度差)步,再同时走,第一个相同就是交点

2021-11-13 16:52:57 346

原创 [牛客] - OR36 链表的回文结构

题目链接题目:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。过程:由于是单链表,我们无法从尾向后去遍历,因此我们可以先得到链表的中间结点 mid。将 mid 所指的链表后面的结点逆置(逆置在我之前的博客写了 反转链表)这样就可以得到类似 1 -> 2 -> 3 <-2 <- 1 的链表令cur 指向链表头结点,

2021-11-13 16:02:00 383

原创 [LeetCode] - 206. 反转链表

题目链接题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。过程:1.struct ListNode* next = cur->next;2.cur->next = newhead;3.newhead = cur; cur = next;以此类推:结束while循环。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; *

2021-11-13 15:31:18 74

原创 [牛客] -程序员面试宝典-CM11 链表分割

题目链接题目:现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。解读:如果链表的内容为1 3 4 5 8 2 7,给的x的数值为6,则改变后的链表为1 3 4 5 2 8 7过程:由于在原先的链表改变结点的顺序较为麻烦,因此使用两个链表分别存储比x小的结点和比x大的结点。分别malloc两个结点:lessHead,greaterHead,再使用尾指针指向它,把小于x的结

2021-11-13 13:37:58 124

原创 [LeetCode] - 21. 合并两个有序链表

题目链接题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。过程:当 l2 小于 l1 并且 head 为空时,将head 和 tail 指向 l2。然后l2 指向它的下一个结点。l1 小于 l2,tail 下一个结点指向 l1,然后 tail = l1,l1 = l1->next。以此类推:代码:/** * Definition for singly-linked list. * struct ListNode

2021-11-13 10:53:03 642

原创 [LeetCode] - 965. 单值二叉树

题目题目链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */bool isUnivalTree(struct TreeNode* root){ if (root==NULL) { return true; }

2021-11-11 09:19:50 48

原创 [数据结构与算法] - 堆排序实现

堆的一些性质图片转载链接若给定下标为 i 的节点,可得出:1.父节点下标为 ( i - 1 ) / 22.左孩子节点下标为 2 * i + 1,右孩子节点下标为 2 * i + 1思路:思路一:以插入的方法从头开始用向上调整算法进行调整默认数组第一个数已经在堆里。第二个数是56,比堆顶70要小,进行向上调整算法。第三个数是30插入到56的右子树中,但是30比56小,所以进行向上调整算法。然后以此类推。代码:#include <stdio.h>#include

2021-11-10 18:07:28 305

原创 使用宏实现一个整数奇数为和偶数位的交换

思路:将二进制位与10101010 10101010 10101010 10101010按位与(即与0xaaaaaaaa按位与)可保留原数据的奇数位,将二进制位与01010101 01010101 01010101 01010101按位与(即0x55555555)可保留原数据的偶数位,然后将保留奇数位的数右移一位可变为偶数位,将保留偶数位的数左移一位可变为奇数位,最后相加,即可得到奇数位与偶数位想交换的数。代码:#include <stdio.h>#define SWAP_BIT(n

2021-10-30 15:50:34 167

原创 找单身狗 异或

题目一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。介绍异或异或是位运算符,针对的是二进制位,两个相同的数异或为0,相异的为1。如 1 ^ 1 = 0; 1 ^ 0 = 1;异或还有几个特性:任何值跟0异或都等于它本身,如 5 ^ 0 = 5;相同的数异或为0,如 5 ^ 5 = 0;思路题目中说“其他所有数字都出现两次”可知,我们可以使用异或来消除出现两次的数字,剩下的就是两个出现次数为1次的异或。如 数组[1,1

2021-10-30 15:05:25 183

原创 程序员之路的始端

自我介绍本科学校是湖南工学院,大一的时候读的是工商管理专业,因为不感兴趣,在大二转入了机械电子工程专业,当时想想也是脑抽转了这个专业。大学四年没干出点啥,职业规划也没有,然后考了研,报了天津工业大学的计算机研究生并顺利录取。编程目标想成为通晓底层的人,握有屠龙之术。也想成为优秀的知识输出者。怎么学习编程因为想走的是C/C++ 服务器端,所以首先先学好C语言打好基础,然后学习C++,先看《C++ Primer》前八章,并行学习数据结构,然后后面的章节慢慢看,买了些书《effective C++》、《

2021-10-24 10:38:47 103

原创 [数据结构]-汉诺塔

递归实例:汉诺塔首先说下汉诺塔的规则:把圆盘从下面开始按大小顺序重新摆放到另一根柱子上。在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘现在假设总共有n个圆盘:n=2时:1.把小圆盘从A->B2.把大圆盘从A->C3.把小圆盘从B->C当有n个盘子时:把上面n-1个盘子看成是一个整体1.把n-1个圆盘从A->C->B(原问题规模小了1的问题)2.把第n个盘子从A->C(移动了一步)3.把n-1个小圆盘从B-

2021-09-20 10:20:37 232

原创 C语言小惑

1. C语言小惑1. 操作符-按位取反(~)问题:为什么打印出-1?解答:在32位操作系统里面,整数存放的位数为32位整数a=00000000000000000000000000000000011111111111111111111111111111111 ~a一个整数的二进制的表示有3种,分别为原码、反码、补码。而整数在内存中存储的是补码。-1:原码:1,0000000000000000000000000000001(第一位为符号位,1表示负数)先将原码转换成反码

2021-09-19 15:39:11 87

原创 C++基础--C++ primer练习7.35

观察下列代码是否有错误typedef string Type;Type initVal();class Exercise{public: typedef double Type; Type setVal(Type); Type initVal(); //只有声明,没有定义,在后续使用中会报错private: int val;};//这里函数的返回类型为全局作用域下的string,与setVal()类型冲突Type Exercise::setVal(Type parm){ va

2021-07-22 11:39:49 121

原创 C++基础--空指针和野指针

空指针指针变量指向内存中编号为0的空间用途:初始化指针变量注意:空指针指向的内存是不可以访问的示例1:空指针#include <iostream>using namespace std;int main(){ //空指针 //1.空指针用于给指针变量进行初始化 int *p = NULL; //2.空指针是不可以进行访问的 //0~255之间的内存编号是系统占用的,因此不可以访问 //*p = 100; 错误 return 0;}野指针指针变

2021-06-17 10:53:48 230

原创 C++基础--const修饰指针

const修饰指针有三种情况:1. const修饰指针 --常量指针const int * p = &a;指针的指向可以修改,但是指针指向的值不可以改。记忆技巧:const 后接*p,表示指针所指向的值不能修改。2.const修饰常量 --指针常量int * const p = &a;指针的指向不可以改,但是指针指向的值可以改。记忆技巧:const 后接 p,表示指针的指向不能更改,p代表地址。3.const即修饰指针,又修饰常量const int * cons

2021-06-17 10:45:46 146

空空如也

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

TA关注的人

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