自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

karry hello的博客

他往上,想吸收那阳光

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

原创 随笔

现实坠入幻境,浮躁趋于平静,远处的音符是你指引我的信号吗?

2019-10-24 15:39:04 136

原创 spi读写驱动

我们的传输总线 spi/i2c 主要目的就是传输数据,我们验证spi/i2c的方法就是进行读写数据验证。读写数据验证主要有两种,第一种是通过建立/dev下的设备节点进行访问,这类访问需要依靠上层的open、read、write函数,需要编写一个短小的测试程序。第二种就是建立/sys/devices下的设备文件,通过echo 、cat 进行访问,本文描述的是第二种方式:前期准备:前期的硬件...

2019-10-14 20:34:23 1052

原创 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。

给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, ...

2019-01-26 11:49:47 2456 1

原创 关于数组的题目

1、输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 vector<vector<int> > FindContinuousSequence(int sum) ;解析:题目需要解析的点,如何计算累加?数组下标控制涉及到读取问题,考虑由于是连续的数组,所以可以采用small和big变量标记代表数字,并且进行++/--;如何返回一...

2019-01-26 11:28:43 296

转载 kmp算法

转自https://blog.csdn.net/v_july_v/ar 从头到尾彻底理解KMP1. 引言    本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱。所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本文。    然近期因开了个算法班,班上专门讲解数据结构、面试、算...

2019-01-26 11:28:32 117

原创 快速排序

快速排序的三种方法(递归方式) void swap(int *a,int *b){ int tmp=*a; *a=*b; *b=tmp;}int QuickSort1(int arr[],int start,int end,int n)//左右交换{ int index=arr[end]; while(start<end) { while(start<...

2018-10-29 12:22:47 98

原创 输入n个整数,找出其中最小的K个数

vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { int len=input.size(); vector<int> vec; if(len<k||len<=0) return vec; ...

2018-10-28 09:40:43 1007

原创 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字

 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字int MoreThanHalfNum_Solution(vector<int> numbers) { if(numbers.empty()) return 0; int times=1; int len=numbers.size(); i...

2018-10-27 09:28:10 543

原创 树的子结构

 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) bool HasSubtree2(TreeNode* p1, TreeNode* p2)//判断这个根节点下的子树是不是 { if(p2==NULL) return true; if(p1==NULL) re...

2018-10-26 10:47:45 81

原创 二叉树的镜像

TreeNode* Mirror(TreeNode *pRoot) { if(pRoot==NULL) { return NULL; } if(pNode->left==NULL && pNode->right==NULL)//左右子树都没有的时候都没有 r...

2018-10-26 09:33:39 100

原创 矩形覆盖

 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法动态规划------分治法思想:把问题分解成若干个小问题,从而求解出大问题,区别分治法可能存在重复计算,而动态规划把结果存储起来,可避免冲重复计算使用动态规划:使用额外的空间保留结果值:int rectCover(int number) {...

2018-10-26 09:16:58 95

原创 合成链表

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则 附:合并规则类似于插入排序非递归:  ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if(pHead1==NULL&&pHead2==NULL) { ...

2018-10-25 15:45:01 234

原创 输入一个链表,反转链表后,输出新链表的表头

输入一个链表,反转链表后,输出新链表的表头方法一:利用三个指针进行反转注:考虑链表断开问题       头结点为NULL       有一个头结点ListNode* ReverseList(ListNode* pHead) { //头结点为空情况 if(pHead==NULL) { return NULL;...

2018-10-25 14:54:57 303

原创 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。方法一:1、考虑指数<0情况2、指数>0。底数==0,                     底数==1                     底数为负数----判断指数3、指数==0 。任何数的0次方都等于1 double Power(do...

2018-10-25 14:43:15 386

原创 输入一个链表,输出该链表中倒数第k个结点

 输入一个链表,输出该链表中倒数第k个结点  ListNode* FindKthToTail(ListNode* pListHead,unsigned int k) { ListNode* p=pListHead; ListNode* p2=pListHead; if(pListHead==NULL||k<=0) ...

2018-10-24 21:33:51 134

原创 字符串替换

题目:将字符数组里的空格替换为%20 替换的前提条件是,这个数组必须有额外的空间在编写代码时候要注意,数组越界的情况;例如变量一定要初始化,否则这个变量作为数组下标会造成越界void replaceSpace(char *str,int length) { if(str==NULL) return ; int count=0;...

2018-10-24 11:00:59 114

原创 二叉树的遍历(非递归)

二叉树的非递归遍历主要是利用栈的特性 void PreOrderTraverse(TNode *pRoot)//前序{ stack<TNode*> sck; sck.push(pRoot); TNode *pNode = nullptr; while(!sck.empty()) { pNode = sck.top(); ...

2018-10-23 22:57:53 110

原创 二叉树的创建,遍历

 1、通过前序遍历建立二叉树typedef struct TNode{ int val; TNode* left; TNode* right;}*BTree;BTree Creatpre(){ BTree T; int a; cin>>a; if(a==0) { T=NULL; } else { T=new TNode; T-&gt...

2018-10-23 20:55:44 166

原创 sizeof和strlen区别:

sizeof和strlen区别:1、sizeof 是运算符,在编译阶段就已经计算好了,而strleln()是函数,在运行阶段才进行计算所以sizeof()不能求动态分配内存空间的大小。  可以通过sizeof确定数组维数。例:char arr[40][]={0};                                   int n=sizeof(arr)/sizeof(arr[0]);...

2018-03-19 12:30:06 154

原创 进程之间的通信--套接字(网络部分)

多进程网络编程:在linux下创建一个新进程用的系统调用是fork()使用头文件#include                 #include                 pid_t fork(void);此函数每次调用都返回两次,父进程返回的是子进程的PID,子进程返回0,根据其返回值可以判断其是子进程或是父进程,详细代码见后。思想:在网络编程中,服务器与客户端进

2017-11-15 13:26:19 696

原创 网络编程--tcp

网络编程:1、概念:客户端:接收数据的一端         服务器:提供数据的一端2、网络通讯协议的选择: Tcp:面向链接可靠的流式服务,当双发持续的发送数据采用面向连接方式内核维护一条专用传输线路用来通信Udp:无连接 不可靠的数据报服务可不可靠看两点:能不能收到数据,数据能不能到3、编程Tcp的编程流程Server:socket  bind  list

2017-11-06 19:48:46 195

原创 线程的同步控制---信号量、互斥锁、条件变量

一、线程同步原因:线程之间拥有许多共享资源,当此资源被多个线程进行访问时容易造成数据错误,程序崩溃,所以需要对线程的临界资源进行同步控制。同步:多进程和多线程访问临界资源时,需要进行同步控制。多线程或者多进程的执行并不会完全的并行运行,有可能主线程需要等待函数线程的某些条件的发生。多线程之间临界资源:全局数据 堆区数据文件描述符线程之间的同步控制方式:3.1信号量#

2017-11-01 21:18:33 325

原创 线程

一、概念:线程:是进程内部的一个执行流,每个进程至少有一个线程,每个线程只能依赖一个进程,线程通过线程库来创建,创建的线程被称为函数线程,main主函数呗称为主线程。 区分:函数线程和函数调用的区别:函数线程于主线程同时运行,分别在两条执行流中;而函数调用是顺序执行,与主函数在同一执行流中。线程与进程的区别:1、进程是资源分配的最小单位,线程是cpu调度的基本单位。

2017-10-31 12:09:12 216

原创 面向对象语言的四大基本特征

面向对象语言的四大基本特征:抽象:抽象就是指忽略一些我们目标所需之外的东西。比如:学生成绩管理系统,考察学生这个对象时,我们只关心他的班级、学号、成绩等,而不用去关心他的身高、体重这些信息。封装:是对象和类概念的主要特性。封装是把过程和数据包围起来,只提供一个接口供用户使用,这样提高了代码的安全性,以及使用的简便性。继承:在c++里一个类可以通过另一个类派生而来,新类被称作派生类,原来

2017-10-27 14:54:41 9213

原创 进程间的通信--(四)消息队列

消息队列一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。  每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。二、在Linu

2017-10-24 20:44:58 263

原创 进程间的通信--(三)共享内存

共享内存共享内存允许两个不相关的进程访问同一个逻辑内存,是两个正在运行的进程之间传递数据的一种非常有效的方式。所有进程可以访问共享内存里的数据,这块内存就像是他们自己malloc一样,但是共享内存里面没有包含同步机制,所以我们要通过一些机制去对这块内存进行同步操作,比如传递一些消息来实现这一功能共享内存编程步骤:1.创建一段共享内存区域2、当共享内存区域创建以后并不能被任何

2017-10-24 14:50:09 193

原创 进程间的通信---(二)信号量

信号量首先了解几个基本概念: 1、临界资源:在同一时刻只能被一个进程访问。例如我们现实生活中的打印机,取款机等等–硬件资源(处理器、内存、存储器以及其他外围设备等)–软件资源(共享代码段,共享结构和变量等)2、临界区:访问临界资源代码3、原子操作:不能被打断的操作4、内核对象:就是维护对象保存对象信息的数据结构信号量:进程间的同步控制(详见文章进程的同步与异步),可...

2017-10-23 10:20:32 238

转载 内核对象

1. 什么是内核对象内核对象是操作系统为一些系统级的对象(像进程,线程,信号量)维护的一些数据结构。这些数据构保存了与系统级对象相关的系统级信息。例如:所有内核对象都会保存该对象的引用计数。进程对象会保存进程ID。文件对象会保存当前字节偏移量,共享模式,打开模式等。操作系统中所有内核对象对是保存在一块内存空间中,系统上所有的进程都共享这一块内存空间。 2.内核对象的访问方式

2017-10-23 10:06:45 181

原创 八种通用寄存器

八种通用寄存器:基本作用处理机包含了一组 1 6位寄存器,其中有 8个是任何时候都可存访的“通用寄存器”。这些寄存器被称之为:r 0、r 1、r 2、r 3、r 4、r 5、r 6以及r 7。U N I X使用这些寄存器的惯例是:* r 0、r 1在表达式求值时用作临时累加器;在过程返回时存放返回值;在过程调用的某些情况下可用来传递实参。* r 2、r 3和r 4在过程执行时可

2017-10-21 10:07:31 7112

原创 进程间的通信--(一)管道

 进程间的通讯方式有很多种:管道通信,共享内存,消息队列,信号量、远程过程调用,以及网络部分的通过套接字(socket)来通讯,首先我们来了解一下管道通信。一、管道 引入:在现实中的一些管道,比如水管、气管都起着运输作用,在进程通信中管道也起着对信息数据的承载运输作用,所谓管道通信就是开辟一块空间,进程在里面进行读写(如图一所示),这一块空间就是我们所说的管道文件,那管道文件和我...

2017-10-20 22:22:13 302

原创 友元函数/类

一、为什么要使用友元函数/类在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员,类A就得是类B的友元函数,这样类A的成员函数就可以访问类B 中的成员变量1、普通函数友元函数:      位置:公有私有均可,常写为公有,类内类外均可      方法: friend + 普通函数声明    class A  {    

2017-10-13 16:10:10 252

原创 模板1

一、为什么要使用模板程序员在实现一些功能代码时,往往会针对不同的参数类型,为了减少代码的冗余性,减少代码量以及内存空间的浪费下面是一些举例代码:#includeusing namespace std;int compare1(int a,int b){ ......}int compare2(char a,char b){ ......}in

2017-10-07 14:17:51 201

原创 程序是从main主函数开始运行吗?

很多人开始学计算机语言,编写代码时都会有一个疑问:程序真的是从main主函数开始的吗?之前什么都不做吗?main结束后就不能执行其他函数了吗?下面本篇文章就为此问题做一个简单的解释。   操作系统在装载程序之后,首先运行的不是main程序的第一行,在执行mian主函数之前其实还有一些别的代码需要执行,这些代码负责准备main主函数执行所需要的一些环境,并且负责调用main主函数,在main函数

2017-09-25 21:53:00 10106

原创 进程同步与异步

进程的同步与异步一、进程同步:       间接制约:当两个进程需要同一资源时,当A进程占用资源时,B进程就不能使用资源,从而导致阻塞,当A进程使用完毕时,B进程才能从阻塞状态转为就绪状态;      直接制约:A进程需要获取写入内存,B进程需要从此内存中读出数据,这是当A进程没有写入时,B进程就处于阻塞状态,当A进程写入B进程才能转为就绪执行      注:简单来说进程同步就是两

2017-09-23 16:43:34 3416

空空如也

空空如也

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

TA关注的人

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