自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tjy199610_10的博客

C语言的学习

  • 博客(104)
  • 收藏
  • 关注

原创 最详细的ros安装(包含所有相关依赖文件)

1.首先下载vmware链接:https://pan.baidu.com/s/1vD28skG9l0euTvLkCOIOtg提取码:61le激活码网上找一个就可以了2.ubuntu桌面版镜像链接:https://pan.baidu.com/s/1–rkY3vtitRx8TT9vK9t5w提取码:g5f9注意必须要安装桌面版,否则后面的海龟跑不起来3.安装ros安装步骤4.rosdep init报错问题找到网址对应的ipvim /etc/hosts文件最后一行增加 151.101.1

2021-10-06 10:09:01 706

原创 Redis基础-简单动态字符串SDS

在Redis中没有直接使用C语言传统的字符串,而是自己构建了简单动态字符串SDS,那么为什么Redis需要自己构建字符串呢?首先Redis用作缓存数据库,对于存储速度要求是非常苛刻的,传统的C字符串对于字符串的操作比如strcat每次都需要重新划分空间,涉及到系统调用以及内存分配算法等会占用修改字符串的大部分时间,这当然不是我们想看到的,再比如我们计算传统的C字符串长度我们要调用strlen函数去获取,这里的时间复杂度就是O(N),而是用动态字符串SDS的时间复杂度就是O(1),下面就来揭晓原因:S

2021-01-05 16:58:42 169

原创 static inline对函数的作用

在阅读代码的时候我们经常会看到这样的函数原型:static inline char sdsReqType(size_t string_size) { if (string_size < 32) return SDS_TYPE_5; if (string_size < 0xff) return SDS_TYPE_8; if (string_size < 0xffff) return SDS_TYPE_16; i

2020-11-03 00:53:41 6377 2

原创 红黑树-2 添加

前一篇博客介绍了红黑树的性质和旋转,这一片将具体介绍下红黑树的添加。在介绍红黑树的添加之前大家首先要理解这几点:1.红黑树在插入之前就已经是红黑树了2.当前要插入的节点必须是红色(不会影响黑高)3.父节点是红色的时候需要进行调整(父节点是红色它的孩子节点必须是黑色),祖父节点肯定是黑色的,叔父节点可能是红色可能是黑色。对于父节点和叔父节点都是红色的情况不需要进行左旋和右旋,可以直接通过改变颜色去保证红黑树。对于父节点是红色,叔父节点是黑色的情况必须通过旋转去保证红黑树。这种情况下还要区分当前插入

2020-09-20 23:34:11 121

原创 红黑树-1 介绍与旋转

红黑树是基于二叉树的一种非常重要的数据结构,它在二叉树的基础上加上了一下五点的限制,这也是红黑树的性质:1.每个节点是红色或者黑色2.根节点是黑色3.每个叶子节点是黑色4.如果一个节点是红色,那么它的两个孩子都是黑色5.对每个节点,从该节点到其子孙节点的所有路径上包含相同数目的黑节点这里重点要理解第四和五点根据这五点性质我们可以推断出第二张图是符合红黑树性质的。接下来介绍下红黑树的旋转:红黑树存在左旋和右旋两种,在插入节点和删除节点的时候需要进行旋转来调整红黑树使其始终满足上面介绍的五条

2020-09-20 23:07:33 220

原创 栈的原理与实现

栈是一种数据结构,它包括入栈和出栈,先入的放在最底下最后才会出栈。其实栈是非常简单和容易理解的,下面是我写的一个C语言小用例:#include <stdio.h>#include <stdlib.h>#include <assert.h>#define ALLOC_SIZE 512typedef int KEY_TYPE;typedef struct _stack{ KEY_TYPE *base; int top; int stack_size;}

2020-09-20 22:44:52 89

原创 快速排序的实现和总结

快速排序是在面试中经常被问到的一种排序,首先来介绍一下它的基本思想:选取一个哨兵(通常选择最左边的那个)作为一个关键元素,然后通过排序使得哨兵处于一个这样的位置:哨兵左边的数都比它要小,右边的数都比它要大,然后对其左边和右边的集合同样进行这样的操作,直至左右区间只有一个数为止。void quick_sort(int * data, int left, int right){ int i,j, key; if(left > right) return ; key = data[left]

2020-09-13 17:47:33 85

归并排序的实现与总结

前面讲到的希尔排序采用的是分组插入思想,今天讨论的归并排序采用的也是分组思想,不过它是分组合并。这张图涵盖了归并排序的核心思想,采用2分法把原本的元素一直往下分,直到每个每个集合中只有1个元素时再进行集合的合并。void sort(int * data, int * tmp, int start, int middle, int end){ int i = start, j = middle + 1, k = start; while(i <= middle && j &l

2020-09-13 15:37:58 109

原创 希尔排序的实现与总结

希尔排序是经过分组的插入排序,那么怎么理解呢?在此之前我们先来再次认识一下插入排序。我们可以看到对于插入排序,前面的元素都是有序的,后面有新的元素插入进来时我们只需要找到对应的位置插入进来即可。void insert_sort(int * data, int length){ int i, j, temp; for(i = 1; i < length; i++) { temp = data[i]; for(j = i - 1; temp < data[j]; j--)

2020-09-13 14:39:47 185

原创 linux设备驱动程序:Hello World内核模块

代码如下:hello.c文件#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE(“dUAL bsd/gpl”);static int hello_init(void){printk(KERN_ALERT “Hello, world\n”);return 0;}static void hello_exit(void){printk(KERN_ALERT “Goodbye, cruel wo

2020-09-13 11:01:53 394

原创 给定一个正整数n,求出0到n中有几个数满足其二进制表示不包含连续的1

样例:输入:5 输出:50 01 10 100 101满足,11不满足。那么6144呢?答案是610,怎么去计算呢?思路:查找从0到n中有多少个数包含连续的1,然后在总数中去掉这些情况,得到的就是结果。请看下面求解的代码:#include &lt;stdio.h&gt;int cnt = 0;void fun(int m){ int flag = 0; w...

2018-10-23 17:31:23 1354

原创 C语言实现求一个字符串的最长回文字串 动态规划

求解思路:回文字符串的子串也是回文,比如P[i,j](表示以i开始以j结束的子串)是回文字符串,那么P[i+1,j-1]也是回文字符串。这样最长回文子串就能分解成一系列子问题了。这样需要额外的空间O(N2),算法复杂度也是O(N2)。首先定义状态方程和转移方程:P[i,j]=0表示子串[i,j]不是回文串。P[i,j]=1表示子串[i,j]是回文串。P[i,i]=1P[i,j]{=...

2018-10-19 20:42:07 1988

转载 两个单链表的合并(C语言实现)

两个单链表的合并(C语言实现)#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;typedef int ElementType;typedef struct Node *PtrToNode;struct Node { ElementType Data; PtrToNode Next;};typedef PtrToNo...

2018-09-27 11:56:00 9286

原创 数据结构之二叉树的各种操作

#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#define LEN sizeof(struct BiTNode)typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}*BiTree;void InitBiTree(BiTree *T...

2018-08-23 10:02:16 203

原创 排序之时间复杂度和空间复杂度总结

排序方法 平均时间复杂度 最好 最差 空间复杂度 稳定度 冒泡排序 o(n^2) o(n) o(n^2) o(1) 稳定 选择排序 o(n^2) ...

2018-08-21 13:18:10 1046

原创 数据结构——7种排序——示例

#include &lt;stdio.h&gt;#define MAXSIZE 10typedef struct { int r[MAXSIZE]; int length;}SqList;void swap(SqList *L, int i, int j){ int temp = L -&gt; r[i]; L -&gt; r[i] = L -&g...

2018-08-21 12:32:06 401

原创 C语言链队的各种操作

#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#define LEN sizeof(Node)#define LEN1 sizeof(LinkQueuePtr)typedef struct Node{ int data; struct Node *next;}Node,*LinkQueue;typedef st...

2018-08-15 10:56:46 473

原创 循环队列的各种操作

#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#define LEN sizeof(SqQueue)#define MAXSIZE 10typedef struct { int data[MAXSIZE]; int front; int rear;}SqQueue;SqQueue *Q;void I...

2018-08-14 23:23:21 212

原创 链栈的各种操作

#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#define LEN1 sizeof(StackNode)#define LEN sizeof(LinkStackPtr)typedef struct StackNode{ int data; struct StackNode *next;}StackNode,*Li...

2018-08-13 20:53:18 225

原创 C语言普通栈的各种操作

#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#define LEN sizeof(SqStack)#define MAXSIZE 10typedef struct { int data[MAXSIZE]; int top;}SqStack;SqStack *S;void InitStack(){ ...

2018-08-13 19:44:30 269

原创 C语言共享栈的各种操作

#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#define MAXSIZE 10#define LEN sizeof(SqDoubleStack)typedef struct { int data[MAXSIZE]; int top1; int top2;}SqDoubleStack;SqDouble...

2018-08-13 19:23:09 360

原创 栈的基本操作

#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#define MAXSIZE 5#define LEN sizeof(SqStack)typedef struct { int data[MAXSIZE]; int top;}SqStack;SqStack *S;void InitStack(){ ...

2018-08-13 11:17:57 193

原创 单链表的断链逆序

#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;string.h&gt;#define LEN sizeof(Node)struct student{ char name[10]; struct student *next;}Node;struct student *head = NUL...

2018-08-12 23:12:46 477

原创 双向循环链表的创建和删除

#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;string.h&gt;#define LEN sizeof(Node)typedef struct Node{ char name[10]; struct Node *next; struct Node *prev;}Node,*Li...

2018-08-12 23:11:38 244

原创 带头结点的链表的各种操作

#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;string.h&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;math.h&amp;gt;#include &amp;lt;time.h&amp;gt;#define LEN sizeof(Node)typedef struct Node{

2018-08-12 20:21:24 255

原创 不带头结点的链表的增删改查

#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#define LEN sizeof(struct student)struct student{ char name[10]; int age; struct student *next;};struct student *head = NULL;voi...

2018-08-12 20:20:35 272

原创 用e为底来表示的浮点常量的写法与要求

书写浮点常量有多种选择,,基本形式:包含小数点的一个带符号的数字序列,接着是字母e或E,然后是一个代表10的指数的有符号值,且必须为整数。 例如: -1.56E+12; 2.87e-3; -8e1.0;错 可以省略正号,可以没有小数点或指数部分。 例如: 2E5; 19.28; 但是不能同时没有二者。 例如: -080;错 可以省略小数或者整数部分,但不能同时省略。 注...

2018-08-12 14:30:17 20251 3

原创 指针数组 数组指针详解

关于指针数组和数组指针,是很多刚开始学C语言的人都很头疼的问题,我也不例外,最近我专门把这块做了一个总结,来和大家一起分享,有什么问题或者疑惑也可以在下方评论或者私信我。我主要是通过代码来使大家加深这块的印象,在这之前,先来了解一下这两个的概念。数组指针:本质上还是一个指针,它是一个指向数组的指针。 指针数组:本质上是一个数组,数组中的每个元素都是指针类型。#include&lt;s...

2018-08-11 21:29:16 420

原创 用函数来实现字符串的各种操作

int len() { char a[20]; printf(“显示字符串的长度\n”); printf(“请输入一个字符串:”); scanf(“%s”,a); int i=0; while(a[i]!=’\0’) i++; printf(“%d”,i); return 0; }int triple...

2018-08-10 16:43:13 289

原创 字符数组和字符指针的区别

我们经常会碰到这样的问题: char *p = “xyz”; char *q = “xyz”; char pa[] = “xyz”; char qa[] = “xyz”; 以下说法正确的是: A、p和q指向同一块地址 B、p和q的内容可以修改 C、pa内容修改后qa的内容也被修改 D、pa和qa指向同一块地址正确答案:D分析: p和q是指针,指向同一块字符串常量区,内容...

2018-08-10 11:11:37 212

原创 系统的大端模式与小端模式

大端模式:高字节存放高地址 小端模式:高字节存放低地址 下面举个例子: 有int型数据0x12345678存放在地址0x00开始处,则大小端存放方法见下图 那么怎么验证系统是大端还是小端模式呢? 下面推荐两种方法: 1.用联合体来验证:include &lt;stdio.h&gt;int checknum(){ union check { ...

2018-08-10 10:45:25 307

原创 陷阱之有符号无符号字符型数组

请看下面这段代码:#include &lt;stdio.h&gt;#include &lt;string.h&gt;int main(){ char a[1000]; int i; for(i=0;i&lt;1000;i++) { a[i]=-10-i; } printf("%d\n",strlen(a)); print...

2018-08-10 09:54:27 2314 2

原创 C/C++引用必须为左值的问题详解

我们常常会遇到这样的问题: const int&amp;amp; a = 101;//对 int&amp;amp; b = 101;//错例子: int a; int &amp;amp;b = a; a = 10; printf(“b = %d\n”,b); 此时b = 10,b是a的引用,就是说b和a的地址相同,对a做改变b也跟着变化。 那么这是为什么呢? 下面我们...

2018-08-10 09:27:47 2545

原创 Linux C采用makefile进行多文件编译时对全局变量的用法

我们刚开始学习makefile进行多文件编译时常常会遇到这样的问题:你想在多文件中定义一个全局变量来实现在不同的文件中,只要该变量的值在其中一个文件改变,其他相应的文件中该变量的值也变成那个值。 但是刚开始常常会遇到问题,主要的问题就是你的全局变量声明和定义的地方不对。 首先要理解这些概念 1.定义需要分配存储空间 2.初始化是定义变量时候赋给变量的值; 3.赋值是以后用到该变量,赋给该...

2018-08-08 19:50:25 845

原创 定时器简单项目的实现 ——10s引爆定时

1.10s的爆炸定时:/*------------------------名称:10s炸弹爆炸装置修改:无日期:2018.7.25功能:将共阳极的数码管和P1端口相接,通过数码管从9到0然后引爆。//即利用分频器发出声音完成这一操作,分频器接P2^4.-------------------------*/#include &lt;reg51.h&gt;#define Dat...

2018-07-26 14:00:59 2118

原创 单片机第三讲 ——中断及定时器基本知识

定时器中断是由单片机中的定时器溢出而申请的中断。 51单片机中有两个定时器T0和T1: TF0:定时器T0溢出中断请求。当定时器TO产生溢出时,TO中断请求标志TF0置1,请求中断处理。 TF1:定时器T1溢出中断请求。当定时器Tl产生溢出时,T1中断请求标志TF1置1,请求中断处理。 Stm32共有11个定时器: 1.两个高级定时器:TIM1、TIM8————————-APB2 2....

2018-07-26 13:54:53 820

原创 单片机第三讲 ——数码管的显示

数码管分类:共阴极数码管,共阳极数码管 数码管的显示方式:静态和动态 共阴级数码管:1亮0不亮 共阳极数码管:0亮1不亮 数码管的基础知识就不多讲了,下面是我写的几个数码管的程序,通过和单片机连接可以实现其相应的功能。/*------------------------------- 2018.7.22 七段显示实验 功能让数码管从0到99不停的显示---...

2018-07-26 13:49:00 2845 2

原创 Altium Designer 常用功能键整理

最近在学习硬件,刚开始需要画PCB板,用到了Altium Designer这个软件,经过了几天的摸索,把经常用到的功能键做了一下整理。 在画原理图的时候问题不大,主要是根据原来的图画就可以了,接下来就是对生成的PCB的布局。 首先生成的PCB图是这样的: 你需要把红色的部分全部移动到黑色的框中,并且连线要整齐不要交叉,这样布线的时候才轻松。 下面来将一下其中的一些技巧: 在移动的过程...

2018-07-26 13:27:17 856

原创 单片机第二讲 点亮第一盏灯

在学习单片机时,我们需要有一定的数字电路基础,这里我主要讲LED灯实现的过程。 实现LED灯的闪烁需要软件和硬件的结合,下面我来讲一下我所用到的东西。 1.keil5软件:用于编写C语言代码,实现不同模式下交通灯的闪烁。 2.stc-isp软件:STC-ISP 是一款单片机下载编程烧录软件,是针对STC系列单片机而设计的,可下载STC89系列、12C2052系列和12C5410等系列的STC...

2018-07-21 16:56:28 742

原创 单片机第一讲

单片机的组成:单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4...

2018-07-21 16:02:34 327

空空如也

空空如也

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

TA关注的人

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