- 博客(40)
- 问答 (2)
- 收藏
- 关注
原创 3.mysql基本数据类型
文章目录mysql基本数据类型数值类型bit类型浮点数floatdecimal字符类型charvarchar日期和时间类型enum和setenumsetmysql基本数据类型数值类型tinyint[unsigned] 占1个字节,带符号的范围为-128~127,服务号范围为0~255,默认有符号smallint[unsigned] 占2个字节,带符号范围为-2^15~2^15-1,无符号为2^16-1int[unsigned] 占4个字节,带符号范围为-2^31~2^31-1,服务号是2^32
2022-04-15 17:55:44
1406
41
原创 数据库的基本使用
数据库的基本使用文件保存的缺点文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便数据库存储介质:磁盘,硬盘数据库相关操作启动mysqlsystemctl start mysqld停止mysqlsystemctl stop mysqld连接mysql服务器mysql -h “127.0.0.1” -P3306 -uroot -p-h 指定要连接的mysql服务器,例如上面连接本地服务器127.0.0.1-P 指定访问的端口(默认mysq
2022-04-10 20:32:49
3224
3
原创 多态的深入理解
多态的深入理解1.多态通俗的说,就是多种形态,具体点的就是去完成莫格欣慰,当不同的对象去完成时会产生不同得形态2.多态构成的条件(1).必须通过基类的指针或者引用调用虚函数(2).被调用得函数必须是虚函数,且派生类必须对基类的虚函数进行重写class Person{ public: virtual void ByTicket() { cout<<"买全价票"<<endl; }}class Student:pu
2021-10-16 21:03:48
403
4
原创 3分钟带你熟悉进程的等待与替换!!!
进程的相关操作main函数返回值:返回给操作系统echo $?//查看最近一次程序退出码进程退出码:进程退出时的返回值0:正常退出!0:退出异常各个退出码所对应的各个文字信息,例如下面:#include<stdio.h>#include<string.h>int main(){ for(int i=0;i<100;i++) { printf("%d:%s\n",i,strerror(i)); }
2021-09-29 20:28:45
764
26
原创 C++继承不会怎么办?一篇文章带你搞懂C++继承!!!
继承继承:保证原有类的基础上进行扩展,是类设计层次的复用1.class 子类名称:基础方式(public,protected,private) 父类(基类)2.继承中private和protected的区别: 在类里面private和protected几乎没什么区别,但是在继承里面二者有一定的区别在继承中,private继承的都不可见,但是protected方式继承的都可以看见1.基类的private成员在派生类中无论以什么方式继承都是不可见的,这里的不可见是指基类的私有成员还是被继承到了派生类
2021-09-26 16:07:29
719
5
原创 中秋节爆肝万字,带你熟悉Linux进程的基本操作!!!
今天是中秋节,祝各位小伙伴中秋节快乐,记得吃月饼吖图片来自网络,侵联删Linux进程基本操作1.进程基本概念在Linux中进程信息被保存在task_struct(PCB)2.查看进程的方法ps ps aux | greap myprocls /proc3.创建进程fork():创建一个子进程#include<iostream>#include<unistd.h>using namespace std;int main(){ .
2021-09-21 15:56:33
1175
52
原创 36. 有效的数独
36. 有效的数独请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。输入:board = [["5","3",".",".","7",
2021-09-17 21:32:23
788
5
原创 C++模板进阶
C++模板进阶# C++模板初阶1.非类型模板参数template<class T, size_t N>class Array{ private: T arr[N];};模板参数分为类型参数和非类型参数,如上述所述代码就是非类型模板参数非类型参数:出现在模板的参数类表中,更在class或者typename之类的参数类型名称非类型参数就是作为一个类(函数)的参数,在模板中该参数可以被当作常量来使用比如库里面的Array就是使用非类型模板参数来完成的当
2021-09-15 10:03:35
637
26
原创 stack,queue,priority_queue的模拟实现
stack,queue,priority_queue的模拟实现stack的模拟实现栈是一种先入后出的数据结构,主要具有以下接口上面就是stack(栈)的主要功能了,而这次我们要利用自己写的栈来实现这些结果在上面的例子中我们利用系统提供的stack实现了对栈的push,pop,top,size,empty等接口,下面我们就要利用自己所写的栈模拟实现这些功能,具体的功能我会在下面代码中详细解答namespace hello{ //该种写法为容器适配器的写法:借助deque容器来
2021-09-11 17:07:10
1468
33
原创 链表的排序
148. 排序链表你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例 2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例 3:输入:head = []输出:[]链表排序的最佳方法:归并排序1.找到中间节点2.将中间节点断成左右两半,然后
2021-09-11 12:30:38
10811
25
原创 二叉树的层序遍历
107. 二叉树的层序遍历 II给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其自底向上的层序遍历为:[ [15,7], [9,20], [3]]首先完成二叉树的层序遍历,然后将数组进行逆置,就完成了自低向下的二叉树的层序遍历,故此题的难点是完成二叉树的
2021-09-10 16:46:21
240
2
原创 二叉树刷题
剑指 Offer 55 - I. 二叉树的深度输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。该题目比较简单,为二叉树基本类型的题目,二叉树一般都要用到递归来解决首先我们能够想到,一个数如果root==nullptr,说明该数节点为0,如果ro
2021-09-06 18:59:52
139
1
原创 回溯算法刷题合集
回溯算法刷题合集组合问题77. 组合给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]//回溯算法求组合问题://1.首先构建数组存放要返回的值//2.判断递归结束的条件//3.for循环遍历(注意看清楚从哪个位置开始遍历)//4.递归//5.回溯//回溯相当于进行n层for循环
2021-09-06 18:56:48
364
原创 栈和队列刷题集合
栈刷题集合面试题 03.02. 栈的最小值请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。//示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); --> 返回 -3.minStack.pop();
2021-09-06 18:53:44
351
15
原创 string刷题集合
string刷题集合简单题1.验证回文字符串125. 验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。**说明:**本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false本题思路比较清楚,对于大多数人来说上来就是直接双指针开干,也不看题目,这就导致下面的问题:[外链图片转存失败,源
2021-09-06 17:59:34
334
1
原创 C++模板初阶
C++模板初阶1.函数模板1.函数模板的语法C++支持模板这一泛性编程,提高了C++的复用性,代码的简洁度看下面的例子实现一个交换函数void Swap(int& a, int& b){ int temp = a; a = b; b = temp;}但是上面这个函数只能支持两个整形数据的交换,如果要实现两个浮点数的交换,那么我们又要重载上面的Swap函数void Swap(double& a, double& b){ double t
2021-06-05 16:22:53
429
44
原创 CC++内存管理
C/C++内存管理1.内存四区1.栈区:用来存储局部变量,函数的形参栈自上向下生长的2.堆区:用于存储程序运行时动态开辟的内存,一般由程序员自己动态申请与释放,如果没有释放就会造成内存泄露3.静态区:用来存储静态变量,全局变量4.代码区(常量区):用来存储代码段,只读变量2.C语言中内存管理的方式C语言中通过malloc/calloc/realloc动态申请内存空间,而用free来释放这块内存,这里我们不在对malloc/calloc/realloc展开详细的讲解,感兴趣的可以去看看我
2021-06-05 13:51:39
747
25
原创 深入理解C++类和对象(下)
深入理解C++类和对象(下)文章目录深入理解C++类和对象(下)1.const修饰的成员函数2.初始化列表3.static关键字4.友元5.内部类1.const修饰的成员函数类中的成员函数后加const称为const修饰的成员函数,在被const修饰后,类中的成员变量不可以被改变被const修饰后,表面上修饰的是成员函数,实际上修饰的是成员函数默认参数的this指针,表示this指针指向的值不可以被修改class Person{public: Person(int a, int b)
2021-06-02 15:01:05
445
36
原创 深入理解C++类和对象(中)
深入理解C++类和对象(中)如果一个类里面什么也不写,那么它里面真的什么都没有吗?答案是否定的,如果一个类是空类,那么编译器会为我们提供6个默认成员函数,分别为构造函数,析构函数拷贝构造函数,赋值用算符重载函数,&操作符重载,const修饰的取地址操作符重载,那么接下来本片文章将带你来理解这6个默认成员函数1.构造函数构造函数是一个特殊的成员函数,类名与函数名相同,主要完成对对象的初始化特点:1.函数名与类名相同2.没有返回值,也不写void3.对象实例化时编译器会自动调用对应
2021-05-26 20:38:26
1918
68
原创 深入理解C++类和对象(上)
1.面向对象的初步引入C语言注重过程C++注重面向对象例如:点外卖C语言:注重下单–>接单–>送单这个过程,通过一个个函数来实现这三个过程C++:客户–>商家–>骑手C++更注重对象之间的交互,利用对象之间的交互来完成任务,每个对象都有不同的行为,例如客户下单,商家接单制作,骑手送单C++通过这三个对象之间的行为交互来实现整个送外卖的过程,通过这个例子我们可以先简单理解一下c++中的对象概念2.类的引入在C++中,结构体内不仅可以定义数据,还可以定义函数例如
2021-05-21 17:50:57
1151
36
原创 一篇文章带你初识C++
1.命名空间关键字:namespace在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作 用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。命名空间的定义定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名 空间的成员。//1. 普通的命名空间namespace N1 // N1为命名空
2021-05-19 20:51:12
1354
36
原创 队列的实现与应用
队列的实现与应用文章目录队列的实现与应用1.队列的基本概念2.C++STL中队列的实现3.队列的模拟实现1.队列的基本概念队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能
2021-04-20 20:40:38
1131
14
原创 双向带头循环链表
双向带头循环链表1.双向带头循环链表的概念如上图所示,即为一个最简单的双向循环链表的示意图,链表中每一个结点都由三部分组成,包括数据域,next指针,prev指针其中,next指针指向下一个结点,prev指针指向它的前一个结点,这样一来就构成了一个头尾相连的双向循环链表,需要注意的是上面第一个头结点不存储数据,只是作为一个标记作用,使它找到下一个结点和尾结点2.双向带头链表的实现1.定义结点结构每一个结点由3部分组成,数据域,next指针,prev指针,故定义一个结构体存储这三部分内容`t
2021-04-17 20:27:16
639
10
原创 顺序表
顺序表的基本概念顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中顺序表的实现方式顺序表一般利用数组+动态内存管理实现,一般设置特定的接口方便后续调用;我们要利用顺序表实现简单数据的增删查
2021-04-02 20:33:41
2249
18
原创 时间复杂度与空间复杂度
我们知道一个程序最核心的两部分是算法和数据结构,而算法的执行效率取决于时间效率和空间效率,这就引出了时间复杂度与空间复杂度的概念,下面我们来学习一下时间复杂度与空间复杂度1.时间复杂度1.1时间复杂度的概念算法中的基本执行次数,为算法的时间复杂度我们用大O的渐进表示法来表示时间复杂度// 请计算一下Func1基本操作执行了多少次?void Func1(int N){ int count = 0; for (int i = 0; i < N; ++i) { for (.
2021-03-27 17:55:21
88
1
原创 文件操作函数介绍
fopen函数fopen:打开文件,成功时返回文件地址,失败时返回NULL fopen函数如果是以方式打开的方式,文件不存在打开失败fopen如果是以只写的形式存在若文件不存在则创建文件,若文件存在则清空文件内容FILE*pf=fopen函数语法:fopen(“文件名”,“打开方式”);计算文件内字符个数#include<stdio.h>int main(){ int num = 0; FILE* pf = fopen("data.txt", "r");//通过fo
2021-03-15 20:51:55
377
16
原创 C语言实现三子棋
C语言实现三子棋C语言实现三子棋要从以下几个方面进行考虑:打印菜单界面打印棋盘玩家下棋电脑下棋判断输赢这次我们仍然采用分文件进行书写,建立三个文件,test.c, game.c,game.h。test.c用来实现程序的主体game.c 用来对主体函数进行封装game.h存放头文件,行数和列数以及对函数的定义test.c和game.h的代码如下://test.c#include"game.h"void menu(){ printf("\t\t 三子棋小游戏\n
2021-01-24 19:17:34
1360
12
原创 2021-01-11
我是一名计算机科学与技术专业的学生,第一次接触编程也是在电视,电影里看到那些黑客攻防,所以一直梦想成为一名黑客大神接下来我要每天坚持写代码,提交github,写博客,未来的日子加油????????希望三年后能够进入腾讯,网易,阿里这种大公司????????...
2021-01-11 14:04:57
268
4
原创 2020-12-25
二分查找1.二分查找基本概念:二分查找又称折半查找,折半查找就是使有序数列不断缩小为原来的一半,直到找到该元素或折半区域的首元素位置高于尾元素位置为止输入10个有序的数字和想要查找的关键字,然后用折半查找,找到关键字在数组中的位置2.二分查找的一般步骤:折半查找是一种高效的查找方法,该方法可以明显减少比较次数,提高查找效率,但是,折半查找的先决条件是查找表中的元素必须是有序的首先,必须设定3个变量low,mid,high,分别保存数组元素的开始,中间和结尾的序号,假定有10个元素,则令lo
2020-12-25 19:16:27
428
9
原创 2020-12-22
链表结点的删除:向链表中添加结点之后,如果希望删除结点,该怎么办呢?还是通过上次小朋友手拉手进行比喻例如:队伍中一个小朋友想离开队伍,并且这个队伍没有断开的方法就是他旁边的小朋友将手拉起来void Delete(struct student* pHead, int ilndex)//定义一个函数传入头指针和要删除结点的位置{ struct student* pTemp;//定义一个零时结点 struct student* pPre;//删除结点位置前的结点 pTemp = pHead;
2020-12-22 23:48:25
170
3
原创 2020-12-21
链表的输出与插入1.链表的输出:链表的输出首先要自定义一个函数,传入链表的头指针,定义一个零时结点来遍历整个链表,完整代码和详细注解如下:void Print(struct student* pHead)//将头结点作为函数参数{ int ilindex = 1;//定义一个变量来记录打印信息的个数 struct student* pTemp;//定义一个零时结点来遍历循环打印整个链表 pTemp = pHead;//令零时结点为头结点 printf("该链表现有%d个成员\n", iCou
2020-12-21 23:49:50
179
4
原创 2020-12-20
链表的建立是一个动态过程,动态建立结点时要为其分配内存,所以在学习建立链表之前要复习一下关于动态分配的函数:malloc函数:void*malloc(unsigned int)作用:该函数的作用是在内存中动态的分配一块size大小的内存空间,malloc函数会返回一个指针该指针指向分配的内存空间,如果发生错误,则返回NULLcalloc函数:void*calloc(unsigned n,unsigned size)作用:该函数的作用是在内存中动态的分配n个长度为size大小的连续内存空间数组,
2020-12-20 22:00:19
2039
7
链表学习:静态链表
链表的概念:链表由一系列节点组成,其中每个节点包括两个域,一个是数据域,用来存储数据,另一个是指针域,用来存储下一个节点的地址,链表在内存中是非连续的例如:struct LinkNode{ int age;//定义数据域 struct LinkNode*next;//定义指针节点,指向下一个节点首地址};链表在指定位置插入与删除元素不需要移动元素,只需要修改指针即可,而数组删除与加入元素则需要移动后面的元素,链表相对于数组来讲,则多了指针域空间开销,拿到链表第一个节点就相当于拿到整个链
2020-12-19 14:08:29
264
3
原创 递归
递归递归简单点来说就是函数本身调用它自己的一种方式;用一个比较容易理解故事来解释一下:从前有座山,山上有座庙,庙里有个老和尚讲故事,讲的是什么呢,讲的是从前有座山,山上……相信后面的故事大家已经知道了,这是一个无限套娃的过程它就像我们高中时期学过的递推数列一样:设a1=1,an=a(n-1)+c,an的每一项都与它的前一项有关,递归也是一样的道理,它在运行过程中会调用它自己,来完成自己的工作。相信大家现在已经对递归有了初步的认识,那么接下来就深入了解一下递归吧,首先了解一下构成递归需具备的条件:
2020-11-05 22:49:56
977
8
原创 2020-11-03
学习分享:指针数组#include<stdio.h>int main(){ int a[] = { 1,2,3 }; int b[] = { 4,5,6 }; int c[] = { 7,8,9 }; int* arr[] = { a,b,c }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf(" %d", arr[i][j]); } printf("\
2020-11-03 20:09:04
198
原创 2020-10-28
人生第一个重程序:#include<stdio.h>int main(){printf(“hello world”);return 0;}第一次写程序有点激动,也许对都的人来说很简单,但对我来说这是非常大的进步,加油,从今天开始正式迈出成为程序员的第一步,希望有一天我可以追上那些大佬,成为一名顶级程序员,实现自己的梦想,第一次写博客,希望大家多多点赞支持...
2020-10-28 10:09:01
236
空空如也
Linux下vim配置出问题了
2021-09-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人