自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 反转部分链表

反转部分链表要求:给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。我们来分析一下这个题,反转链表中的部分节点,也就是说有一部分不变,有一部分变,所以我们要记录下变的那部分节点前后两个节点的节点指针,然后反转链表,最后再连接即可。这里存在一种情况,就是Lift为第一个节点的情况,这种情况就只需要记录第right+1的节点指针了。这里用了四个指针,有点多。。(p

2022-01-13 11:06:24 1547

原创 删除链表重复的元素

删除链表重复的元素要求:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字。如:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* deleteDuplicates(struct ListNod

2022-01-11 17:16:23 977

原创 判断链表中环的入口节点

判断链表中环的入口节点要求给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。这个问题比较绕,原因是这是个数学循环问题,我们这里来做一个证明。假设链表全长为 m+n,其中 m 表示环入口之前的长度,n 表示环的长度,当两指针第一次相遇,这时候快指针一定已经饶了环一圈了,我们假设相遇的位置距离环入口k,此时有下列状态: distance(fast) = m + n + kdistance(slow) =

2021-12-18 23:45:13 659

原创 判断链表是否有环

判断链表是否有环要求给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。主要思想是双指针,让一个每次指针走一步,一个指针每次走两步,如果有环,那两个指针会相遇,如果没有环,那就最后运动到最后为空。/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; *

2021-12-18 19:52:04 631

原创 斐波那契数列

斐波那契数列要求写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 2:输入:n = 5输出:5int fib(int n)

2021-12-18 16:41:00 371

原创 (推荐)进程详细讲解(二)

接下来有7000字的进程总结,让我们开始吧!!20.利用SIGCHLD 信号防止僵尸进程当发生以下两种情况时,父进程会收到该SIGCHLD信号:⚫ 当父进程的某个子进程终止时,父进程会收到 SIGCHLD 信号;⚫ 当父进程的某个子进程因收到信号而停止(暂停运行)或恢复时,内核也可能向父进程发送该信号。我们知道,子进程结束时,我们要回收子进程,避免僵尸进程的出现。子进程结束会产生一个SIGCHLD信号,然后我们用wait()来监控子进程是否结束,最后将其回收,回收完毕再再回到父进程自己的工作流程中

2021-12-17 22:36:31 566

原创 (推荐)进程的详细讲解(一)

什么是进程,急速了解进程!!

2021-12-17 22:29:17 801

原创 删除链表中重复的元素

删除链表中重复的元素存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字。输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]重复的都删除重点是:加入哑结点之后就可以使所有数据结点都有前驱结点,这样就会方便执行链表的一些操作struct ListNode* deleteDuplicates(struct ListNode* head){ if (!head) { //排除空链表的情况

2021-12-17 22:17:42 882

原创 Linux的I/O文件系统

1.在 Linux 系统中,内核会为每个进程(关于进程的概念,这是后面的内容,我们可以简单地理解为一个运行的程序就是一个进程,运行了多个程序那就是存在多个进程)设置一个专门的数据结构用于管理该进程,譬如用于记录进程的状态信息、运行特征等,我们把这个称为进程控制块(Process control block,缩写PCB)。PCB 数据结构体中有一个指针指向了文件描述符表(File descriptors),文件描述符表中的每一个元素索引到对应的文件表(File table),文件表也是一个数据结构体,其中记录

2021-12-13 20:07:26 428

原创 反转单链表

反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]输入:head = []输出:[]反转链表的主要思想是:利用双指针,双指针一前一后,前面指针断开,指向新节点,然后移动双指针,以此往复直到遍历完链表。/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode

2021-12-09 23:12:35 218

原创 无头指针输入删除目标节点

无头指针删除链表中的节点要求:请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。题目数据保证需要删除的节点 不是末尾节点 。/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */void deleteNode(struct ListN

2021-12-08 19:26:58 150

原创 C语言删除链表的倒数第N个节点

C语言删除链表的倒数第N个节点要求:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]解法:设置双指针,如果要删除第n个节点,就让一个指针比另外一个指针快n步/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */str

2021-12-08 19:17:13 1620

原创 循环移动数组

旋转数组给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]解法如下:void rotate(int* nums, int numsSize, int k){int i,lenth;int temp[numsSi

2021-12-08 11:32:38 178

原创 反转整数方法

反转整数给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。示例 :输入:x = 123输出:321int reverse(long int x){ long b=1; long temp=1; long resut=0; while(b!=0) { temp=x%10; //从个位开始取数 resut=resut*10+temp; //将取出来的数逐个相加

2021-12-08 11:02:39 396

原创 反转字符串

反转字符串输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]解法如下:利用双指针,两两对换void reverseString(char* s, int sSize){ int a,i; char temp; a=sSize-1; //数组从0开始,所以要减去1 /* sSize=sSize-1; if(sSize%2!=0) sSize=sSize+1; */ fo

2021-12-08 09:31:25 128

原创 MX6U-MINI官方 SDK 移植实验(LED)

官方 SDK 移植实验(LED)前言:我们就来讲解如何移植 SDK 包里面重要的文件,方便我们的开发。但不是所有的半导体厂商都会为 Cortex-A 架构的芯片编写裸机 SDK 包,极少,所以我们只是借助SDK里的三个重要文件来开发,不能完全依赖SDK开发。在 Cotex-A 芯片下基本都需要我们自行编写,比如.s 启动文件、寄存器定义等等。我们重点是需要 SDK 包里面与寄存器定义相关的文件,一共需要如下三个文件:fsl_common.h:SDK_2.2_MCIM6ULL\devices\MCIMX

2021-12-02 16:31:58 247

原创 MX6U-MINI语言版开发流程(LED)

C语言版开发流程(LED)前言:本章我们就来学习如何用汇编来完成 C 语言环境的初始化工作,然后从汇编跳转到 C 语言代码里面去。比如初始化 DDR、设置堆栈指针 SP 等等,当这些工作都做完以后就可以进入 C 语言环境,也就是运行 C 语言代码,一般都是进入 main 函数。所以我们有两部分文件要做:①、汇编文件汇编文件只是用来完成 C 语言环境搭建。②、C 语言文件C 语言文件就是完成我们的业务层代码。实验程序编写:新建 VScode 工程,工程名字为“ledc”,新建三个文件:start.

2021-12-02 16:28:11 142

原创 汇编操作流程(LED)MX6U-MINI

本文是MX6U-MINI的LED汇编开发流程总结1. 新建一个名为“1_leds”的文件夹,然后在“1_leds”这个目录下新建一个名为“led.s”的汇编文件和一个名为“.vscode”的目录。2.中.vscode 文件夹里面存放 VSCode 的工程文件,led.s 就是我们新建的汇编文件,我们稍后会在 led.s 这个文件中编写汇编程序。3.使用 VSCode 打开 1_leds 这个文件夹,编写 led.s。4. 使用arm-linux-gnueabihf-gcc 编译文件,将 led.s

2021-12-02 16:23:27 1189

原创 动态链表详解

链表目录:1.链表的简介2.链表的实现3.动态链表4.链表的插入和删除5.双链表1.链表的简介链表是一种常见的数据结构,我们经常会使用数组来存放数据,但使用数组时,要先指定数组的大小,如果向这个数组加入过多的元素,则会超出,导致无法保存数据;如果数据太小,又会非常浪费内存空间。所以,我们希望有一种存储方式,其储存的元素个数是不受限定的,当进行添加元素时,存储的个数也会增加,这种储存方式就是链表。在链表中,有一个头指针head变量,用这个指针变量保存第一个元素的地址,其中,这个元素包括两

2021-11-12 19:27:16 7782 1

原创 内存之管理

内存管理前言:为何进行内存管理?程序运行时,需要将数据存放在内存空间中给程序使用。在软件开发中,常需要动态分配和撤销内存空间,例如对动态链表中的结点进行插入和删除,就需要对内存进行管理。目录:1.内存的组织方式2.堆1.内存的组织方式当我们编程好一个程序后,程序需要先转载进计算机的内存中,然后再被运行,程序被组织成4个逻辑段。1.可执行代码2.静态数据:可执行代码和静态数据,存储在固定的内存位置。3.动态数据(堆):请求动态分配和释放的内存的内存池成为堆,也称为自由储存空间。4.栈:局

2021-11-10 23:12:25 889

原创 指针数组和数组指针(非常易懂)

指针数组指针与一维数组当定义一个一维数组时,系统会在内存中为改数组分配一个储存空间,其数组的变量名就是数组的首地址。若定义一个指针变量,并将数组的首地址赋值给指针变量,则我们说该指针指向了这个一维数组。例如:int *p,a[10];p=a; //数组的变量名a就是数组的首地址另一种赋值方式也可写为:int *p,a[10];p=&a[0]; //a[0]的地址也是数组的首地址...

2021-11-08 21:47:55 76483 30

原创 指针讲解(非常易懂)

指针与地址想要了解指针,我们必须要了解两个问题:1.数据在内存里如何存储2.数据在内存里如何读取了解了这两个知识点,就很好理解了~首先第一个问题,数据在内存里如何储存:系统里的内存就像是餐厅里带有编号的桌子,每个桌子都有自己的编号,如果需要使用内存,就需要得到桌子的编号。定义一个整型变量i,整型变量需要4个字节,故编译器会为变量i分配编号从1000~~1003....

2021-11-07 21:09:50 497

原创 大创草稿图

指令语音下达口令模糊语音识别算法非指令的模糊语音过滤算法智能识别控制中心 语音识别模糊语音识别过滤算法二级指令类似词屏蔽算法屏蔽非指令语音语音识别控制中心雷达导航视觉识别执行任务激光雷达扫描激光雷达导航激光雷达制图控制中心语音下达口令模糊语音识别算法非指令的模糊语音过滤算法控制...

2020-04-10 14:34:48 288

原创 模块学习笔记—(1)编码器减速电机

模块学习笔记—(1)编码器减速电机电机作用 编码器电机转动可以产生脉冲信号,根据脉冲信号,可以得出轮胎的转动速度、轮胎的位移,电机正反转等。电机介绍 我的编码器电机是130TT减速电机,电机轴转一圈可以产生13个脉冲信号输出,电机减速比为1:120,所以减速电机的输出轴旋转一圈,实际可以产生的脉冲为13*120=1560个。在通过STM32F4编码器接口的== 4倍频就是624...

2020-03-26 17:12:45 10827 3

原创 储存器介绍

学习笔记—(1)储存器介绍储存器分为RAM(易失性存储器)和ROM(非易失性存储器)Flash(非易失性存储器)这里分别介绍一下RAM、ROM、Flash(一)RAM (Random Access Memory)RAM在存储机制上,分为DRAM(动态存储器)和SRAM(静态存储器)1.1 DRAMDRAM之所称为动态存储器,是因为它需要定期刷新,对电容进行检查。它的存储机制就是电容有无...

2020-02-26 23:58:44 864

原创 OPENMV和STM32的识别追踪小车(详细版)之STM32端

OPENMV和STM32的识别追踪小车(详细版)之STM32端二:STM32的介绍以及程序2.1(STM32F407介绍)STM32F407提供了工作频率为168 MHz的Cortex™-M4内核(具有浮点单元)的性能。我的32是正点原子的最小系统板,它大部分的引脚和战舰是一样的。2.2(引脚分配)串口1:PA9/10复用为串口1用于和OPENMV通信。PWM:PA6/7复用为定时器3...

2020-02-24 21:41:07 16501 27

原创 OPENMV和STM32的识别追踪小车(详细版)之OPENMV端

OPENMV和STM32的识别追踪小车(详细版)实现:通过OPENMV识别Apriltags标签,STM32驱动小车追踪标签博主通过一段时间的学习,做了这个比较简单的以OPENMV为摄像传感器STM32为控制器的寻物小车,不多说,直接进入正题!材料准备小车底盘直流减速电机杜邦线若干7.2V电源L298N模块STM32F407最小系统OPENMV4 H7程序设计思路这里分两个...

2020-02-22 16:01:57 23265 8

原创 FPGA,arduino,STM32,树莓派四者的简介

FPGA,arduino,STM32,树莓派四者的简介FPGA首先说一下FPGA,FPGA叫做可编程门阵列。它的逻辑门,时序等都由开发者自己编程,是一个通过硬件描述语言在FPGA芯片上自定义集成电路的过程优势:简单的说,它就相当于一张白纸,把需要做的东西全部自己做出来,自由度最高。理论上FPGA可以配置成任何需要的处理器。一般用于通信类的行业。难点: 开发难度高,门槛也比较高。对数电模电的...

2019-11-30 11:39:28 12273 3

原创 51单片机蓝牙小车(精要版)

51单片机蓝牙小车(精要版)实现:通过手机与小车的蓝牙通信,实现手机控制小车前后左右的移动。这是博主学了51单片机第一次做的单片机项目,选择了许多人喜欢的蓝牙小车作为第一个项目。准备材料:1.小车亚克力底盘2.减速电机4个(网上搜索有很多)3.蓝牙 HC-064.L298N步进电机5.7.2V电源(记得配好接口,我买的是大田宫的接口)6.杜邦线若干(公对公,母对母,公对母)8....

2019-11-24 23:10:34 19249 22

STM32及openmv识别追踪小车源码

STM32及openmv识别追踪小车源码,个别代码可能需要微调,整体功能比如串口通信,接收处理、PID、语音识别等,有比较没这么灵敏的PID,但是也可以使用!整体功能可以使用!

2020-12-05

空空如也

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

TA关注的人

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