自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 问答 (2)
  • 收藏
  • 关注

原创 Linux编程之守护进程

(一)守护进程是什么?守护进程即使运行在后台他,不依赖于终端的一种服务型进程。该进程是一种很有用的进程, Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。 比如,作业规划进程crond,打印进程lpd等。(二)为什么需要守护进程(1)脱离终端,一般的进程是依赖于终端的,当终端关闭时,该终...

2018-03-10 00:15:06 506

转载 mmap原理之详解

本文转自:http://www.cnblogs.com/huxiao-tee/p/4660352.html(一)mmap基础概念mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而

2018-02-07 18:20:44 14552 6

转载 http协议简介

HTTP简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于199

2018-01-24 23:55:34 268

原创 linux编程之进程控制

(一)fork #include pid_t fork(void);返回值:有两个,一个是子进程的ID,另一个为零。当返回值为0时,进入子进程,大于0进入父进程,返回-1时创建进程错误。子进程与父进程的比较: (1)子进程与父进程的进程ID不同。且父进程ID不同。 (2)内存布局: 子进程是父进程的副本,其中子进程的数据空间,堆,栈是父进程的副本,但是共享真正文段。 (

2018-01-15 15:44:46 470

原创 Linux编程之进程的环境

一程序的存储空间布局二进程的关闭三环境变量1环境表2获得环境变量3设置环境变量四setjmp函数与longjmp函数1作用 检测深层函数的错误信息2实现步骤进程是非常重要的概念,学习进程自我感觉最好的学习方式是从进程的结构上去理解进程,先从浅再入深,循环渐进,下面就总结一下最近对进程的环境的学习总结吧。(一)程序的存储空间布局每一个程序都包

2018-01-13 11:12:25 524 1

原创 Linux编程目录操作

对于linux文件目录操作函数其实使用命令就能实现,但是其实对于一些命令本质上就是调用系统函数的,比如:madir,umask,chown等命令。所以此篇博客就对文件目录操作的系统函数进行一下总结。(1)stat,fstat,fstatat 获取文件信息 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h>

2018-01-01 18:58:46 1378

原创 linux编程之文件I/O

linux下C语言对于文件的操作,我们会经常用到fopen(),fclose(),fwrite(),fread(),fgets()等一系列库函数,基本和是和windows下学习C语言一样的,其实这些库函数就是在linuxx下对系统调用函数的封装,因此这里只介绍系统函数下的文件操作函数。(一)open()打开文件#include <sys/types.h> #include <sys/stat.

2017-12-30 17:36:16 1364 1

原创 shell脚本之awk

(一) 什么是awkawk其实相当于一门可以处理数据文本的语言,这么说的原因是其具有很多类c语言的语法,如:变量,数组,函数,流程控制等,其由Aho,Weinberger,Kernighan大约在1977年开发完成,随后被引入unix/linux中。(二) awk可以干什么awk是一个非常强大的数据处理工具,可对文本进行的编辑,筛选,其非常适用于处理有行和列组成的文本数据,就像处理数据库中的记录一样

2017-12-25 19:05:54 715

原创 shell脚本变量,数组与函数

(一)变量(1)变量的定义##等号两边不能有空格value=123value="jing"declare -i value=100(3)变量的作用域局部变量 需要使用local 定义 全局变量例如:#! /bin/bashfunc(){ echo "global v1 is $v1" #输出200全局变量 local v1=100 #局部变量只在函数内有效

2017-12-24 13:42:55 1458

原创 shell脚本之条件测试与判断

(一)条件测试,与C语言相反,表达式为真时为0,为假时为非0.其测试语法为:test exp 或 [ exp ](1)字符串测试string 为空时是非0,空时为0,只有test才能使用-z string 判断是否为空串,空为0,不空为非零-n string 判断是否为空串,空为非0,不空为零str1 != str2 判断两个字符串是否不等str1 = str2 判断是否相等(2

2017-12-23 16:46:31 470

原创 脚本之正则表达式

(一)正则表达式是什么所谓的正则表达式就是一个描述某些字符串匹配规则的工具,使用其中的元字符可以更好的去匹配想要得到的字符。以便更好的对字符串的处理。(二)正则表达式能干什么主要目的就是匹配文本。但是对于正则表达式的使用需要配合一些根据使用来增强处理文本的功能,例如:grep,sed,awk,more,less,vi等。(三)正则表达式的原理正则表达式是文本过滤的工具,通过元字符配合其他的字符来表达

2017-12-23 12:39:20 686

原创 脚本之简单的sed

(一)sed是什么?sed是一个非交互式的文本编辑器,他可以对来自文本文件,以及标准输入的文本进行编辑,适用于较大的文本,且进行复杂的编辑工作。(二)sed的执行过程sed命令是从文件或者标准输入中一次性读取一行数据,将其复制到缓冲区,然后执行编辑命令对缓冲区的文本行进行编辑,重复此过程。流程如下图:(三)sed的使用 sed的一般命令形式为:sed 【options】 【 script】 【in

2017-12-21 21:40:54 582 2

原创 刚安装的ubuntu需要解决的一些问题

对于新安装的ubuntu会遇到一些问题,例如vim安装,apt-get的更新还有全屏的调节等一系列的问题,所以在这里进行一一解决**(一)全屏的调节,第一开始的进入ubuntu你可能会遇到如下图的显示问题 ,不管如何调节都不能取得全屏的状态,为什么会出现这种情况呢?原因是该操作系统默认分辨率为:**(1)点击右上角设置图标,点击system-setting (我已经调教好了只是做一个示范)(2)把

2017-11-25 00:02:56 2535 1

原创 冒泡排序优化

冒泡排序比较简单**,首先简单说下算法思路:过程:a. 从第一个记录开始和第二个记录比较,如果大于第二个记录就交换,否则就不交换,比较下一个元素,依次循环下去,因此第一趟就会找到最大的值放到数组的最后面n-1的位置上。 b. 然后用相同的方式在前n-2个元素中得出最大值放在n-2位置。 c. 重复上述操作,知道全部比较完成。void BullSort(int a[], int length){

2017-11-20 14:07:17 804 4

原创 简单的KMP算法

虽然题目声称KMP简单,但只是对于理解了的人而言的,但是对于还没有理解的人来说,KMP算法确实是非常难的,但是不要紧,我相信通过我的介绍你会理解的,但是个人认为,不论什么比较难理解的算法,如果直接给你讲,即使讲的方法再简单,但是你没有去自己思考,那也是理解不了的,就像做一道特别难的数学题,你想了几个小时还是没有做出来,但是这时候当别人给你说的时候,你可能会豁然开朗,这是因为你前面几个小时的思考起到的

2017-11-11 12:19:07 659

原创 数据结构学习笔记(21)----红黑树

(一)什么是红黑树对于红黑来说,其是从AVL树演变而来,因此首先应该满足AVL(平衡二叉树)的性质。然后在满足以下性质: (1)节点非红即黑 (2)根节点必须是黑 (3)叶子结点为空且必须为黑 (4)任意一个节点到叶节点的路径中黑节点子树相同 例如: 满足上述性质就是一棵红黑树了,但是对于红黑树的删除与插入必须也要满足以上的条件,下面就来说一下红黑树的插入与删除(二)红黑树

2017-11-06 23:29:48 631 2

原创 数据结构学习笔记(20)---图的应用(生成树与最小生成树)

数据结构学习笔记(20)—图的应用(1)上一篇博客写了图的基本存储于遍历,在此基础上,此篇博客将会介绍图的主要应用—–生成树与最小生成树。(一)生成树定义:我总感觉书上定义比较繁琐,因此就自己简单定义了一下(可能不对哦),生成树其实就是:对于一棵树G,若顶点数为n,则在原来图的基础上把边删除到n-1条边且能连通各点就是生成树。,注意生成树不唯一 例如: 利用遍历方法可以求得生成树,以邻

2017-11-04 16:06:49 1869

原创 数据结构学习笔记(19) ---图的存储与遍历

(一)图的基本术语 (1)无向完全图:图中任意两个顶点都有边存在则该图为无向完全图,且图的边树数为:n*(n-1)/2 (2)有向完全图:图中任意两点都有方向相反的边则该图为有向完全图,且图的边树数为:n*(n-1) (3)连通图:若力图中任意两个顶点都有路径(即可到达)则成该图为连通的。 (4)连通分量:无向图中的极大连通子图称为该图的连通分量,显然无向连通图的连通分量为其自身。

2017-11-04 14:12:48 421

原创 如何使用pull request

前面主要讲的是如何使用git 与一些简单的GitHub操作,但是当你在网上看到一个正在开发项目时,想要参与进来,fork后,对该项目的代码或者对项目添加了一些功能后,想让别人采纳你的代码,这时候就需要想别人pull request 了,下面进行介绍。(一)什么是pull request :该功能从自己修改源代码后,请求对方仓库采纳该修改时采取的一种行为。(二)发送pull request 的前期准备

2017-11-01 23:41:54 13478

原创 数据结构学习笔记(18)---B树

(1)什么是B树,其实有一个另外的没名字叫B-树,所以网上说的B-树其实就是B树。B树的定义: (1) 首先B树是一棵平衡的m路查找树,树中每个节点的最多有m个子树。 (2) 根节点最少有两个子树。 (3) 除根节点以外的非叶子结点最少有[m/2]个子树。 (4) 所有叶节点出现在同一层上,并且不含信息,通常称为失败节点,目的是便于分子B树的查找。 好了,满足上述条件就是一个标准的B树了,

2017-10-28 17:09:50 1373

原创 数据结构学习笔记(17)---归并排序与基排序

(1)归并排序算法思想: (1)对于一个人数组,首先把数组平均分为两部分,即[low,mid]和[mid+1,high], (2)分别对左右两部分进行再进行归并排序。 (3)将左右两步部分合并 例如以下例子:开始将数据看成长度为1的有序表,两两归并为长度为2的表,依次类推直到长度为n的有序表 性能分析:平均时间复杂度O(nlogn),空间复杂度O(1),比较稳定代码:void Merge(

2017-10-28 14:02:31 495

原创 github创建仓库克隆到本地以及分支操作命令

(一)github上创建仓库 (1)注册GitHub账号(进入官网直接可以注册) (2)注册完成后进行第一个repositories的尝试,单机有右上角的+标志,进行new repositories (3)填写项目名称Repository name 这里用Hello_World。 Public、Private在这一栏可以选择Public 还是Private。这里我们 选择Pub

2017-10-26 23:06:59 4680 1

原创 git常用命令总结(1)

(1)创建一个人目录,并该一个目录 mkdir git_hello cd git_hello(2)初始化有个仓库: git init 在该目录下出现 .git文件 (3)在该目录下添加一个源程序hello.cpp并编辑 touch hello.cppvi hello.cpp //添加代码 int main() { printf("Hell

2017-10-26 00:57:45 183

原创 Git与Github建立密钥

(1)Github是什么:GitHub 是一个面向开源及私有 软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。也就是说你的开源软件可以托管到该平台,不论你是合作开发项目还是获得开源软件都可以从该平台上Fork,并用Git参与到项目中去.(2)git 与 GitHub的建立密钥:第一步首先打开github的网页进入,如果你没有GitHub账户, 请先注册一个

2017-10-25 23:57:47 720

原创 Git简介

通过两个星期的学习,虽然还没有完全深入掌握git与GitHub的使用,但是对于简单的软件开发流程与基本的操作还是掌握的不错的,最主要的原因是选了一本好的教材—-《GitHub 入门与实践》,这本书真心讲的不错,可以说的手把手教学,真心体会到作者的用心良苦,非常适合初学者,建议以此本书作为入门教材,话不多说了,接下来就对这两个星期的学习做一番总结与回顾吧。(一)Git是什么?Git是分散性版本控制系统

2017-10-24 22:56:53 225

原创 数据结构学习笔记(16)---选择类排序

数据结构学习笔记(16)—选择类排序选择排序思想就是第一次选出关键字最小的的记录作为第一个,然后然后就是除了第一个人元素外再去选取一个人最小的元素放在第二个,依次循环知道全部记录有序为止。但是这样效率会有点低,为了改进算法的效率而又提出了树形选择排序和堆排序,下面进行一一介绍:(1)简单选择排序:选择排序的基本思想:每一趟在n-i+1(i=1,2,3,…,n-1)个记录中选取关键字最小的记录作为有序

2017-10-23 00:38:26 1032

原创 数据结构学习笔记(15)---交换类排序

数据结构学习笔记(15)—交换排序交换类排序其实一般就两种,一个就是冒排序,另一个就是快速排序,比较两张算法,肯定是快排效率较高,原因很简单,对于冒泡排序只能与相邻的元素进行比较,互换时候只能消除一个逆序,但是快排通过两个不相邻的元素交换,可以消除待排序记录中的多个逆序,即后面的元素不需要再做无谓的逆序了。(1)冒泡排序比较简单,简单说下算法思路:过程:a. 从第一个记录开始和第二个记录比较,如果大

2017-10-22 16:35:38 331 1

原创 数据结构学习笔记(14)---插入排序

数据结构学习笔记(14)—内部排序基本思想:在一个已经排好序的记录子集的基础上,每一步将下一个人等待排序的记录有序插入到已经排序的记录子集上,知道所有待排序记录全部插入为止。(1)直接插入排序:直接插入排序其实很简单,从第二个元素开始,逐步插入到已排序子序列中。其比较实用与排序记录数比较少的情况,排序数目较大时,该算法排序性能不太好。代码如下:void InsertSort(int a[], int

2017-10-22 14:42:13 249

原创 数据结构学习笔记(13)---哈希查找

(1)哈希查找的思想:首先根据一个人关键字映射该关键字的地址,即若关键字为k,确立一个人函数p = H(k),此时p就是该关键字的存储地址,当查找一个人关键字的时候就可以根据函数计算出相应的地址。(2)哈希函数构造原则:一是函数本身便于计算,二是计算出来的函数遍布均匀,尽可能减少冲突。哈希函数常有五种:a**.数字分析法**:事先知道该关键字集合,并且每个关键字的位数比哈希表地址位数多,则可以从关键

2017-10-22 13:12:03 664

原创 MFC 加入背景音乐

对于加入背景音乐的问题,首先我用的是playSound()函数,此函数虽然可以播放声音,但是当另为一个人声音出现时,原声音被打断,即此方法不能当做背景音乐,在此介绍两种添加背景音乐的两种方式:(1)利用线程,即开辟一个新的线程单独作为播放音乐,此时可以用playSound()函数,代码如下:#include <mmsystem.h>#pragma comment(lib, "WINMM.LIB")

2017-10-17 22:19:25 4265 1

原创 MFC透明贴图问题

对于透明贴图从网上找了很多资料,但是只有收获甚小,还是从一位老铁的开源项目中学到透明贴图的解决方案:(一)首先说下我的搜索结果吧,我的解决方案中是用一个函数搞定的: TransparentBlt(pDC->m_hDC,point.x, point.y, 109, 86,memDC.m_hDC,0, 0, 109, 86, RGB(0, 0, 0));该函数的参数原型为:BOOL Transpare

2017-10-17 13:27:38 494

原创 数据结构学习笔记吧(11)---基于树的查找

(1)二叉排序树定义:该二叉树或者是一棵空树或者是一棵具有下列性质的树: 1. 若他的左子树非空,则左子树上所有节点的值均小于根节点的值 2. 若他的右子树非空,则右子树上所有节点的值均大于(等于)根节点的值 3. 他的左子树与与右子树也分别是二叉排序树二叉排序树的插入思路: 1. 首先判断二叉树是否为空,若为空则可以直接把当做根节点 2. 若非空,则key与根节点进行比较 a.

2017-10-14 16:11:02 156

原创 数据结构学习笔记(10)---基于线性表的查找

(1)顺序查找顺序查找比较简单,其思路就是从顺序表的头部或者尾部依次查找数组,直到查找数值为止。其平均查找长度为:ASL = (n+1)/2 代码如下:int SearchByIndex(int* arr,int length,int key){ while (-1 != --length) { if (key == arr[length]) {

2017-10-14 16:10:08 269

原创 数据结构学习笔记(12)----平衡二叉排序树

定义:左子树与右子树的高度之差的绝对值小于等于1 左右子树也是平衡二叉树 a.平衡因子定义: 节点的左子树与右子树的深度之差** 例如: 平衡树的平衡方法:(1)LL型 B = A->lchild; A->lchild = B->rchild; B->rchild = A; A->bf =

2017-10-14 16:07:20 1143

转载 当你在浏览器上,指尖轻轻输入 www.taobao.com 以后发生了什么?

本文转载自微信推送博文当你在浏览器上,指尖轻轻输入 www.taobao.com 以后发生了什么?本文从你按下浏览器的确定键开始分析,一直到你如何找到商品结束。适合各类读者了解你仅仅访问一次淘宝的首页,所涉及到的技术和系统规模,本文作者名叫孙放,著于他在淘宝实习期间。你发现快要过双十一了,于是想给你的男/女朋友买点儿礼物,你打开了淘宝。下面来看看,当你在浏览器轻轻www.taobao.com 以

2017-10-12 21:56:06 24341

原创 哈夫曼编码

今天中秋节,同学都回家了,自己离家太远待在宿舍无聊就看看哈夫曼代码,顺手写了写,特此博客一篇,望多多指教:对一组数进行哈夫曼树的构建:假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,

2017-10-04 15:27:11 460

原创 数据结构学习笔记(9)---已知二叉树的遍历序列,恢复二叉树

思路:首先我们要了解如何使用二叉树中序序列和先序序列来手动恢复二叉树(1)根据先序序列的第一个节点可得到根节点(2)根据根节点在中序序列中的位置可以将中序序列划分为左右子树(3)根据先序的第二个节点可以将子树划分为左右子树,依次循环下去(4)直到当子树的长度为零时结束//给先序和中序创建二叉树char *PreArray = "abdfgceh"; //先序序列char InArray

2017-09-22 17:44:13 454

原创 数据结构学习笔记(8)---二叉树的层次遍历

二叉树的层序遍历思路:使用队列 ,首先将根节点进队,然后出队并输出,把该节点的左右子树分别入队,直到队列为空时循环结束void LayerOrder(PBiTree root){ queue<PBiTree> q; PBiTree p; if (root == NULL) { return; } q.push(root);

2017-09-22 16:43:56 193

原创 链表翻转的是三种方法

翻转链表的三种方法每次遍历从最后一个节点插入最前面使用三个指针原地不动翻转链表递归法翻转链表 接下来进行一一叙述(1)对于第一中方法比较笨拙,思路是:首先遍历到链表的最后一个节点,将最后一个节点插入头节点的后面,接着循环上述操作一一进行插入,知道只剩下一个节点为止。void ReserveList(pListNode pHead){ pListNode p = pHead;

2017-09-22 16:39:56 1229

原创 数据结构学习笔记(6)---二叉树的创建与求深度

对于二叉树的创建其实就是和先序遍历差不多,可以有三种创建二叉树的的方式,即先序创建吗,中序创建和后序创建,但是我一般都是按先序创建的,原因是比较简单容易理解,但是我对于后序与中序创建二叉树好像还没见到过,应该存在但上网查了一下还是,没有呀,这里就只写先序创建二叉树void PreCreatBiTree(PBiTree *root){ int date; cin >> date;

2017-09-22 16:38:05 162

空空如也

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

TA关注的人

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