自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 centos 下C/C++连接mysql的 (头文件、链接库、makefile写法)

最近学了学用C API连接mysql,练了练代码,过程很轻松愉快,心想:mysql连接就这 ?然后链接的时候被弄得怀疑人生······写一篇博客记录一下首先是头文件, 我看有的人写的#include <mysql.h>,我也跟着试了一下,发现报错了,大致意思就是找不到这个 mysql.h 文件。然后百度一下有人说这是因为缺少 mysql 库,下载一个啥 libmysqlclient-啥啥 来着,然后我就复制粘贴把 apt-get 换成 yum install 试了一下发现centos没有这

2021-05-20 13:01:11 1590

原创 Linux下git使用入门(新手向)

1. git克隆我们先在远端创建一个版本库创建好了后, 点开这个仓库, 单击[克隆/下载], 然后点复制在Linux下选择一个合适的文件夹, 输入命令git clone [Shift+Ins粘贴链接]然后git就会把远端的版本库克隆到当前文件夹下2. 将本地的修改提交到远端2.1 git add使用 git add 添加需要提交的文件或文件夹例如:git add test也可以添加所有未提交的文件:git add -A或 git add .上述语句中将要添加的文件为当前

2020-07-16 16:48:23 713

原创 生产者消费者模型中条件变量的使用

目录生产者消费者模型简介条件变量condpthread_cond_wait生产者消费者模型简介生产者消费者模型中有两种角色, 一种是生产者, 一种是消费者.(这不是废话么)这个模型一般是配合多线程环境使用的生产者线程负责生产资源, 消费者线程负责使用(消费)资源. 由于资源是双方共享的临界资源, 那么在多线程的环境下就必然会涉及到线程安全的问题, 因此模型必须满足如下的要求:临界资源每次只能被一个线程访问.资源满时生产者停止生产; 资源空时消费者不得消费.为实现如上要求常需要使用条件变量(c

2020-05-13 16:45:55 350

原创 C++智能指针及其原理

智能指针介绍智能指针(RAII)是利用对象的生命周期来管理资源的技术。RAII,Resource Acquisition Is Initialization 顾名思义,就是在初始化对象的时候获取资源,在这个对象进行析构时会帮我们释放资源,这样做的好处有很多:不需要显示的释放资源可以避免因为没有及时释放资源而造成的内存泄漏资源的生命周期与对象相同智能指针原理下面简单的实现一个智能指...

2020-03-22 18:12:03 246

原创 C++异常的使用

1. 为什么C++引进了异常概念C语言中处理错误的方法有:终止程序,如assert。但是因为某个函数出错而让整个程序终止,这样用户是难以接受的返回错误码,缺陷:需要程序员自己去查找对应的错误,维护成本高C 标准库中setjmp和longjmp为了解决C语言这些不太友好的错误处理机制,C++才引入了异常,异常也是一种处理错误的方法:当一个函数遇到错误时会抛出异常,让函数的直接或间接调用...

2020-03-21 21:09:45 149

原创 C++多态以及实现原理

目录- 基本概念- 实现条件- 一些特殊情况- 抽象类- 原理- 建议的代码风格- 基本概念定义同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。分类动态多态:运行时多态,需要根据引用的对象确定静态多态:编译时多态,编译期就可以确定实现方法虚函数,抽象类,覆盖,模板意义可以根据需求做出不同的反应,增加了代码的通用性- 实现条件继承重写父类的虚函数函数...

2020-03-21 01:02:33 152

原创 如何理解C++当中的继承

目录· 继承的基础知识· 基类和派生类对象之间的交互· 作用域在继承中的运用· 派生类的默认成员函数· 继承与静态成员· 复杂的菱形继承及菱形虚拟继承· 怎样理解继承(我认为是重点)· 继承的基础知识概念继承机制是面向对象程序设计使代码可以复用的最重要的手。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。定义继承产生的新类称为派生类(子类),被继承的类称为父类...

2020-03-17 18:51:07 243

原创 C++入门——模板

- 模板的介绍模板是懒人的福音,是提高开发效率和降低维护成本的利器。相关概念模板分为函数模板和类模板,是泛型编程的基础。泛型编程就是编写与类无关的通用代码,使用时只需要传入实际的类型对模板进行实例化即可。简单来说,模板就是一种万能的类型,我们使用这种类型编写出来的函数就是模板函数;使用这种类型作为类成员编写的类就是模板类。在使用模板的时候需要我们传入实际的类型对模板进行填充(这个步骤...

2020-03-01 19:03:22 224

原创 C++入门——动态内存管理

- C/C++内存分布从上往下:内核空间栈。存储局部变量,往低地址增长。空间比较小,但是申请释放内存速度极快内存映射段。用于装载一个共享的动态内存库,用户可使用系统接口创建共享共享内存,做进程间通信。堆。动态开辟的空间,往高地址增长。空间非常大,申请释放速度较慢,且需要手动释放数据段。存储全局变量和静态变量代码段。存储函数二进制指令,常量- C语言中动态内存管理方式申请使...

2020-02-29 23:36:24 130

原创 C++入门——类的六个默认成员函数

1. 构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,并且在对象的生命周期内只调用一次。构造函数的主要任务并不是开空间创建对象,而是初始化对象。特征如下:函数名与类名相同无返回值对象实例化时编译器自动调用对应的构造函数构造函数可以重载如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成...

2020-02-27 19:34:21 186

原创 C++入门——类与对象

C语言中, 结构体就只是结构体, 在C++中, 结构体内不再是结构体, 它代表的是一个类, 它不仅可以定义变量, 也可以定义函数- 类的定义声明一个类, 需要使用class关键字或struct关键字修饰类名, 如:class className{ // 类体:由成员函数和成员变量组成};用class声明和struct声明的区别在于成员的默认访问权限不同, class的默认访问权限是...

2020-02-26 18:29:31 188

原创 C++和C++11的一些特性,建议初学者看看

1. 命名空间定义:namespace 空间名{ }命名空间可以嵌套定义, 如:namespace N1 { int n1; namespace N2 { int n2; }}使用时也需要嵌套, 例如: N1::n1 = 0; N1::N2::n2 = 0;编译器会将同名的命名空间合并, 这点和汇编的段类似.使用时可以使用 using name...

2020-02-25 22:11:21 2774

原创 二叉树遍历的非递归算法(过程分析+算法设计思路)

二叉树1.树概念及结构2.二叉树概念及结构3.二叉树顺序结构及实现4.二叉树链式结构及实现

2020-02-11 22:36:52 997

原创 使用C模拟实现堆

堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树堆虽然可以看成一颗二叉树,但其本质还是数组,它的应用也与二叉树不同,堆常用于排序,因此物理结构上使用连续的内存空间存放数据要比指针方便得多。...

2020-02-11 16:49:48 126

原创 [编程题] 不要二(非暴力破解法)

题目链接:不要二来源:牛客网二货小易有一个W*H的网格盒子,网格的行编号为0 ~ H-1,网格的列编号为0 ~ W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:(x1-x2)2 + (y1-y2)2 的算术平方根。小易想知道最多可以放多少块蛋糕在网格盒子里。输入描述:每组数组包含网格长宽W,H,...

2019-11-12 01:06:22 410 1

原创 组队竞赛(优化问题)

来源:牛客网组队竞赛(从这里:)牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。(到这里都可以跳过不看)例如:一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3一个队伍三个...

2019-11-07 00:31:43 904

原创 R上手——第一次使用R

首先,运行RStudio,然后你会看到三个窗口——左边一个,右边两个。好了,我们先不管这三个窗口是干嘛的,作为一个程序员,重点当然是如何敲代码。在界面的左上角,我们可以看到一个 “ + ” 号,点一下它,再点击创建脚本(Script)就会生成一个脚本文件了,就是下图左上角那个标志:创建好了后,我们在上面随便写写代码,然后保存。这里保存的方式有三种,第一种如图中红圈所示,这种方式也可以通过...

2019-10-28 00:06:05 1808

原创 深度拷贝带随机指针的链表(C语言)

声明:题目来源:力扣(LeetCode)给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深度拷贝题目链接:复制带随机指针的链表示例:...

2019-10-25 00:08:35 312

原创 寻找链表中的环的入口(C语言)

声明:题目来源:力扣(LeetCode)给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 NULL 。题目链接:环形链表II说明:不允许修改给定的链表。示例可参考博客:判断链表中是否有环,解法与该题类似,需要先判断是否有环,若有环才能进行寻找入环节点的步骤,否则就直接返回NULL了。那如何寻找入环节点呢,方法也不复杂,与第4题类似。在判断出链表有环之后,计算出环的长度,...

2019-10-24 18:36:18 804

原创 判断链表中是否有环(C语言)

声明:题目来源:力扣(LeetCode)给定一个链表,判断链表中是否有环。题目链接:环形链表示例1:输出:true示例2:输出:true示例3:输出:false解题思路:首先从环的性质入手,如果存在环,那么我若是使用一个指针遍历链表,这个指针将会一直在链表中的环里转圈圈。那要如何判断是否有环也就显而易见了:若是指针访问到了之前访问过的节点,那么链表有环,若是能遍历完链表,那...

2019-10-24 18:34:55 4670 1

原创 寻找相交链表的公共节点(C语言)

声明:题目来源:力扣(LeetCode)输入两个链表,找出它们的第一个公共结点。题目链接:相交链表编写一个程序,找到两个单链表相交的起始节点。示例1:在节点 c1 开始相交。示例2:两链表不相交,返回NULL。解题思路:首先需要判断两个链表长度是否相等,使用两个指针分别以相等的速度遍历两个链表,判断哪个链表长,并计算出差值 d。再使用两个指针同时从表头出发,指向长链表的指...

2019-10-24 18:33:09 522

原创 判断回文链表(C语言)

声明:题目来源:力扣(LeetCode)链表的回文结构。题目链接:回文链表示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true思路:先找中间节点,再将中间节点之前的链表逆置,最后从头和中间节点出发判断节点的值是否相等。需要注意的是,若链表节点数为偶数个,例:1 —> 2 —> 2 —&g...

2019-10-24 18:27:33 1584

原创 以定值分割链表(C语言)

编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 。题目链接:分隔链表示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5注:链表两区域的各节点之间的相对位置不变这个题目的解法没什么灵性,比较暴力。使用头插法,(相关方法可...

2019-10-24 18:24:15 509

原创 单链表的相关的简单算法题(C语言)

声明:题目来源:1. 力扣(LeetCode)2. 牛客网(newcoder)。1. 删除链表中等于给定值 val 的所有节点。题目链接:移除链表元素示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5struct ListNode* removeElements(str...

2019-10-24 18:21:38 713

原创 C语言模拟栈和队列(重点讨论队列判空的问题)

栈和队列1.栈2.队列3.栈和队列面试题1.栈1.1栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。1.2栈的实现...

2019-10-19 16:04:04 513

原创 使用C语言模拟顺序表和链表

顺序表和链表1.线性表2.顺序表3.链表4.顺序表和链表的区别和联系1.线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。2....

2019-10-18 00:07:09 217

原创 高斯列主元消去法——C实现

1. 高斯消去法算法原理消去法是求解线性方程组的一种方法,它对增广矩阵进行初等行变换得到一个可回代求解的矩阵,然后再进行回代求得一组解向量。高斯列主元法在使用初等行变换消元之前增加了选主元的过程。为减小计算机计算过程中的舍入误差,选取绝对值大的数作为主元素,再使用初等行变换将方程组转化为一个同解的上三角方程组,最后通过回代法求解该三角形方程组。例:方程组的系数矩阵为:          ...

2019-10-12 00:01:38 10233

原创 矩阵相关操作——C++实现

注:操作较复杂,不建议写数值课设的同学借鉴1. 定义矩阵结构体矩阵是高等代数(线性代数)中的基本运算单位,在运算时具有一些特殊的性质。按定义来看,矩阵是由非质数(m × n)个基本元素单元组成,这些单元按一定的顺序排列,构成了一个m行n列的矩阵。从定义中不难看出,定义矩阵的结构体需要包含三个数据成员:行数(整型);列数(整型);各元素的值(根据计算精度需求进行调整).于是定义矩阵...

2019-10-06 20:30:05 3203

原创 函数指针的运用——模拟排序函数

编写一个函数,用来给数组排序。排序有增序也有减序,为了在一个函数里实现两种排序功能,可以使用转移表。首先写两个函数分别实现两种排序功能:void IncreaseOrder(int *num1, int *num2) { if (*num1 > *num2) { int tmp; tmp = *num1; *num1 = *num2; *num2 = tmp; }...

2019-08-22 17:38:22 311

原创 C语言内置函数自主实现

1.实现strcpychar *Strcpy(char *dest, const char *src) { if (dest == NULL || src == NULL) { return dest; } int i = 0; for (; src != '\0'; ++i) { dest[i] = src[i]; } dest[i] = '\0'; return des...

2019-08-22 11:49:51 227

原创 C语言指针与数组总结

指针与数组本是两个互不相干的概念。但是在C语言中,指针和数组却有着一些奇怪的关系,让我们这些初学者非常的头疼。首先,指针是一种变量类型,它一般包含两个属性:指向的变量的地址该变量所占的空间大小。在实际操作中,对指针进行解引用的过程,就是根据指针中保存的地址找到对应的内存,再根据该变量类型的大小对这块内存区进行读取。(1) 一级指针就是指向一个变量的指针,对一级指针进行解引用操作可以得...

2019-08-21 18:05:48 313

原创 小学时候的智力题之编程实现

如题:喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以喝多少瓶汽水。这个题目大家小时候应该都做过吧,暑假寒假作业里面经常出现的,小时候觉得这种题目能做出来的都好厉害的,肯定是经商大佬······这个题目放现在估计大家都会写,但是不一定喝的完······编程实现的话也不难,就是除以二,然后累加,最后空瓶只剩一个的时候找老板借一个换汽水喝完了再还回去(怎么感觉白嫖了一瓶?)。编程实...

2019-08-21 16:47:41 182

原创 快速查找数组中只出现过奇数次的数

有这样的一个数组,数组中只有两个数字是出现一次,其他所有数字都出现了两次。怎么找出这两个数?首先,考虑下如果只有一个数字出现一次的话,要怎么做。如果只有一个数字出现过奇数次,而其他数字都出现过偶数次的话,可以考虑使用异或 " ^ " 位运算符将所有出现过偶数次的数字给消掉,剩下的那个就是我们要找的数了,详情可参考:C语言的位运算符练习现在考虑有两个数字奇数次出现的情况。方法一:最简单粗暴的...

2019-08-21 16:24:32 729

原创 C语言字符串学习中的一些神奇的题目

废话不多说,直接上题题目1.实现一个函数,可以左旋字符串中的k个字符。例:ABCD左旋一个字符得到BCDA  ABCD左旋两个字符得到CDAB左旋,一般就是指逆时针旋转,但是出题的作者好像并不是这个意思。他的意思大概就是将最左边的字符放到最右边,左旋一个字符就是将上述操作进行一遍,左旋两个就是进行两遍······很无聊有没有?这个函数写出来也很简单,大概就是这样:void LevoSt...

2019-08-14 10:11:25 443

原创 杨氏矩阵的查找(简单版)

有一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的,在这样的数组中查找一个数字 x 是否存在。这就是杨氏矩阵的查找问题。比较简单的一种处理方法是,从右上角开始搜索如果x比当前位置的值要小,向左搜索如果x比当前位置的值大,就往下移一行,再重复步骤1如果下标越界,则停止查找,返回查找失败的信息否则返回查找成功的信息程序代码如下:int SearchYoungTab...

2019-08-08 15:37:09 106

原创 C语言的位运算练习

1.编写函数:unsigned int reverse_bit(unsigned int value);这个函数的返回值返回value的二进制位模式从左到右翻转后的值。例:00000000000000000000000000011001翻转后:10011000000000000000000000000000程序结果返回:2550136832考虑到翻转后的值,就是将原二进制数的第x位的值...

2019-08-07 10:44:46 342

原创 C语言操作符总结

分类1. 算术操作符+ - * / %其中,%为求余操作,只能对整数使用,*和/在运算时若有运算数为浮点数则会将其他的整数隐式转换为浮点数2. 移位操作符<< 左移: 右侧补零,在不考虑溢出时,对整数<<1,相当于 × 2>> 右移: 1. 逻辑移位,左边补0     2. 算术移位,左边用原符号位填充     同左移,对正数>&gt...

2019-08-06 08:46:58 87

原创 递归调用打印杨辉三角

杨辉三角的定义啥的我就不多哔哔了,直接上图  ↓在图中我们可以简单直接地得出一个重要的结论:每一行中除了最左端和最右端的值为1以外,其它位置的值为它上面两个数字之和。...

2019-08-02 01:12:28 1988

原创 使用C语言解决逻辑问题——枚举法的编程实现

人脑相对于计算机的差别在于:人脑会思考。那么,在一些逻辑问题的求解上,人脑就一定优于计算机吗?对于一个逻辑问题,人脑处理的方法一般都是分析、推理然后得出结论。而计算机就不一样了,分析、推理这些功能,计算机都没有,但是人家计算能力强大啊。或许对于人脑来说,使用枚举法解决逻辑问题很麻烦,计算量非常大,但是这对计算机来说不是事,可能得出结论比逻辑推理还要快。下面举例说明:5位运动员参加了10米台...

2019-08-02 00:33:48 1631

原创 二维数组的运用之——扫雷游戏的C语言实现

作为80后、90后的老年人,想必对扫雷游戏都不陌生。扫雷,是微软在win8版本之前系统自带的一款游戏——现在已经被下架了,童年的回忆,很难受。游戏操作很简单,首先初始化一个m×n的方块矩阵,然后玩家不断地翻开方块,直到所有没有雷的方块都被翻开,游戏胜利。在玩家进行操作的时候,游戏会适当的给予玩家一些提示:分布在雷周围的方块会显示出数字提示周围八个小方块里有几个雷,这样,玩家就可以根据提示来排...

2019-07-06 12:30:56 585

空空如也

空空如也

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

TA关注的人

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