自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 模式空间与保持空间

模式空间与保持空间sed在正常情况下将处理的行读入模式空间(pattern space),脚本中的"sed command"就是一条接着一条进行处理,直到脚本执行完毕,然后该行被输出,模式被清空,接着重复执行刚才的动作,文件中新的一行被读入,直到文件处理完毕。一般情况下,数据的处理只使用模式空间,但在某些时候,使用保持空间(hold space),还可以带来意想不到的效果模式空间:直接

2017-07-30 23:03:33 1805

原创 正则表达式 && sed应用

正则表达式与grep一样,sed也支持特殊元字符,来进行模式查找、替换。不同的是sed使用的正则表达式是包括在斜杠线"/"之间的模式。如果要把正则表达式分隔符“/"改为另一个字符,比如o,只要在这个字符前加上一个反斜线,在字符后跟上正则表达式,再跟上这个字符即可。一般使用:(1)^:行首定位符:/^1/    匹配所有以1开头的行(2)$:行尾定位符:/^5/   匹配所有以5

2017-07-30 21:59:34 415

原创 Shell脚本的学习&&sed

Shell脚本的学习&&sed一、概念sed是流编辑器,对文本进行批量化处理。二、基本格式sed option 'script' file1 file2 ...sed option -f scriptfile file1 file2 ...sed 处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,命令行参数可以一次传入多个文件,sed会依次处理。sed的

2017-07-29 23:22:30 503

原创 将二叉搜索树转换成一个排序的双向链表

将二叉搜索树转换成一个排序的双向链表题目:将二叉搜索树转换成一个排序的双向链表。提示:要求不能创建任何新的结点,只能调整树中结点指针的指向,也就是left当prev,right当next。--中序线索化的变型。 在二叉搜索树中,每个结点都有两个指向子节点的指针,在双向链表中,每个结点也有两个指针,分别指向前一个结点和后一个结点。在二叉搜索树中,左子节点的值总是小于右子结点的值,

2017-07-29 17:22:29 830

转载 C++实现一个线程安全且高效单例类

转载自:http://www.cnblogs.com/qiaoconglovelife/p/5851163.htmlC++实现一个线程安全且高效单例类1 单例模式  我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法

2017-07-29 16:31:33 392

原创 C语言模式实现C++继承和多态

C语言模式实现C++继承和多态C实现一个struct A和struct B各包含一个int成员a和b,要求达到B继承了A的效果,也就是B里面包含一个A。并且能达到多态的效果,也就是一个A*p指向A调的是A的函数,指向B调用的是B的函数。1. 继承(1)C++的继承在C++中,可以用一个类(子类)去继承另一个类(父类),子类可以得到父类的相关属性与方法。代码实现:{C

2017-07-29 10:00:46 360

原创 Linux下的cp指令

Linux下的cp指令1.功能复制文件或目录说明:cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并不是一个已存在的目录,则会出现错误信息。2.参数-a 或 --archive此参数的效果和同时指定"-dpR"参数相同-b 或 --back

2017-07-26 23:02:43 1451

原创 判断一棵二叉树是否是另一棵树的子树

判断一棵二叉树是否是另一棵树的子树题目:输入两棵二叉树A和B,判断B是不是A的子树。算法思想:可分为两步,第一步:在树A中查找是否具有和树B的根节点的值一样的结点;(实际上就是树的遍历)                                        第二步:再判断树A中以该结点为根节点的子树是不是包含和树B一样的结构。代码实现:{CSDN:COD

2017-07-26 20:03:58 951

原创 单链表的基础面试题

单链表的基础面试题1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用?(1)基于空间的考虑顺序表的存储空间是静态分配的,在程序执行之前必须明确规定它的存储规模。在静态链表中初始存储池虽然也是静态分配的,但若同时存在若干个结点类型相同的链表,则他们可以共享空间,使各链表之间相互调节余缺,减少溢出机会;动态链表的存储空间是动态分配的,只要内存空间尚有空闲,就不会有溢出。因此,当

2017-07-25 21:59:54 350

原创 求解集合A和集合B的差集

求解集合A和集合B的差集题目:已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。算法思想:取出集合A中每一个元素,与集合B中对比,找到即可删除此节点,否则保留。prev实

2017-07-25 20:43:24 7477

原创 一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中。要求效率尽可能的高。

二维数组中的查找算法思想:我们可以先选取数组中右上角的数字,如果该数字等于要查找的的数字,查找过程结束;如果该数字比要查找的数字大,则剔除该数字所在的列;如果该数字比要查找的数字要小,则剔除该数字所在的行,这样可以缩小查找范围,直到找完,如果还没找到,说明该数组中不存在要查找的数字。举例:代码实现:#include using namespace std;

2017-07-24 16:07:43 1071

原创 链表翻转。比如给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5

链表翻转题目:链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现Node* RotateList(Node* list, size_t k). 提示:这个题是链表逆置的升级变型。算法思想:这个题是链表逆置的升级变型,我们可以将此链表先按照以k为

2017-07-24 10:26:36 918

原创 Linux下的mkdir&&rmdir指令

Linux下的mkdir&&rmdir指令一、mkdir指令Linux下的mkdir指令用来创建指定的名称目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。1.命令格式mkdir [选项] 目录...2.命令功能通过mkdir命令可以实现在指定位置创建以DirName(指定的文件名)命名的文件夹或目录。要创建文件夹或目录的用户必须对

2017-07-22 23:05:06 1271

原创 查找数组中出现次数超过一次的数字

查找数组中出现次数超过一次的数字方法一:若该数组是有序的则可直接查看中间的那个元素即可找到出现次数最多的那个数。该方法就是先对所给出的数组进行排序,在取出中间的那个元素,即可。代码:#include #include using namespace std;int PartSort(int* a, int begin, int end){ int key

2017-07-22 17:15:40 968 1

原创 模拟实现MyString

模拟实现MyString一、模拟实现String的简单版本所实现的包括构造函数,拷贝构造以及赋值运算符的重载等基本操作。关于拷贝构造的深浅拷贝问题:此时需要重新开辟一块空间,将内容拷入,即深拷贝:关于赋值运算符的重载,需要先释放掉其空间,在重新开辟空间完成拷贝。代码实现传统写法:#define _CRT_SECURE_NO_WARNI

2017-07-21 20:01:43 351

原创 给定一个整数N,那么N的阶乘N!末尾有多少个0呢

给定一个整数N,那么N的阶乘N!末尾有多少个0算法思想:用 n 不断除以 5,直到结果为 0,然后把中间得到的结果累加。例如:求10的阶乘,用10/5=2,再用2/5=0,故10!的末尾一共有2个0。代码实现:#include using namespace std;int main(){ int count = 0; int N; cout << "输入所

2017-07-21 14:34:22 856

原创 层序遍历二叉树

层序遍历二叉树算法思想:我们可以利用队列先进先出的性质。层序遍历即应该先打印根节点,从根节点开始分析,为了接下来能够打印值为1的节点的两个子节点,再遍历到该节点时把其左右节点即2和5的两个节点保存在一个队列中,现在队列 中就有了两个节点。按照从左到右的打印要求,取出节点值为2的节点,打印出值为2的节点之后把它的值为3和4的两个节点放入队列。此时队列 中就会有三个节点,值为5

2017-07-21 12:55:22 441

原创 Linux下的ls指令

Linux下的ls指令ls指令总结-a 列出目录下的所有文件,包括以 . 开头的隐含文件-b 把文件名中不可出的字符用反斜杠加字符编号的形式列出-c 输出文件的i节点的修改时间,并以此排序-d 将目录像文件一样显示,而不是显示其下的文件。如: ls -d 指定目录-f -U 对输出的文件不排序-i 输出文件的i节点的索引信息。如 ls -ai 指定文件-k 以k字节

2017-07-20 19:03:40 760

原创 Linux的which指令

Linux的which指令1.which指令在Linux查找某个文件,可用以下命令来搜索:which:查看可执行文件的位置。whereis:查看文件的位置。locate:配合数据库查看文件的位置。which命令的作用:在PATH变量指定的路径中搜索某个系统命令的位置,并且返回第一个搜索结果。即使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命

2017-07-20 18:36:40 1826

原创 替换字符串中的空格

替换字符串中的空格方法一:算法思想:从头到尾扫描字符串,每次遇到空格的时候做替换。假设字符串的长度为n,对每个空格字符,需要移动后面O(n)个字符,因此,时间复杂度为O(n^2)。这种方法显然存在缺陷,我们可以减少移动次数,可以考虑从后向前替换。方法二:算法思想:先遍历一次字符串,统计出字符串中空格的总数,就可以计算出替换之后的字符串的总长度。代码实现:{C

2017-07-20 17:47:00 332

原创 元素出栈、入栈顺序的合法性

元素出栈、入栈顺序的合法性元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。算法思想:建立一个辅助栈,把输入的第一个序列中的数字依次压入该辅助栈中,并按照第二个序列依次从该栈弹出数字。入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1

2017-07-20 16:39:34 1537

原创 计算一个整数二进制位中1的个数

计算一个整数二进制位中1的个数计算一个整数二进制位中1的个数。要求效率尽可能的高。且能正确求正数和负数的二进制中1的个数。方法一:基本思路:先判断整数二进制表示中最后一位是不是1,即将该整数和1做与运算,如果结果为1,则count++,如果为0,进行下一步;接着将输入的整数右移一位,这时处于从右边数的第二位被移到了最右边,再判断是不是1。循环进行,直到最终的结果为0。 

2017-07-20 16:04:29 827

原创 链表是否构成环、环的长度以及环的入口点的求法

链表是否构成环、环的长度以及环的入口点的求法题目:判断一个链表是否构成环,并求出所构成环的长度,以及环的入口点。基本思想:(1)判断是否构成环的方法定义快慢两个指针p1和p2,让这两个指针指向链表的头结点。假设该链表中有n个结点,让快指针比慢指针快两步,之后两个指针沿着链表向前走,若可以构成环,快指针总会比慢指针多走k圈,直到相遇;若不能构成环,则快指针和慢指针永远不可能相遇。

2017-07-20 11:28:03 338

原创 Shell编写进度条

Shell编写进度条此篇博客主要实现用Shell编写一个进度条,关于Shell的基本使用已经在前面几篇博客做了介绍,这里就不在重复。运行结果:

2017-07-19 14:48:58 527

原创 复杂链表的复制

复杂链表的复制复杂链表不仅包括数据域和指针域,还包括一个random域,并且该域可以为空。复杂链表的拷贝主要分为三步:(1)拷贝原始链表的每一个节点,插入到当前节点的后面。(2)调整random指针(3)分离两个链表代码实现:#include #include typedef int DataType;type

2017-07-18 13:43:39 255

原创 1.删除一个无头单链表的非尾节点 2.从尾到头打印单链表

1.删除一个无头单链表的非尾节点这里主要是采用数据替换,将需要删除的节点的下一个结点放在需要删除结点的位置,依次将需要删除结点的后续结点前移,即可完成删除。void DeleteNotTail(pNode pos){ pNode cur = pos->_next; assert(pos->_next); //数据替换 pos->_data =

2017-07-18 10:45:31 407

原创 fork()请问下面的程序一共输出多少个“-”?

fork()题目:请问下面的程序一共输出多少个“-”? #include #include #include int main(void) { int i; for(i=0; i<2; i++){ fork(); printf("-"); } return 0; } 解析:一共输出8个首先程序一开始

2017-07-17 22:49:49 4620 1

原创 Shell脚本学习-正则表达式&&grep

Shell脚本学习-正则表达式&&grep一、基本概念正则表达式:规定一些特殊语法表示字符类、数量限定符和位置限定符,然后用这些特殊语法和普通字符一起表示一个模式。正则表达式的三要素:(1)字符类(2)数量限定符(3)位置限定符grep为行过滤器,正则表达式在grep中用来查找符合模式的字符串。根据正则表达式中的关键字,将当行中的所有符合要求的匹配。二、字符

2017-07-16 20:57:39 577

原创 Shell脚本学习-位置参数和特殊变量

Shell脚本学习-位置参数和特殊变量1.位置参数和特殊变量(1)$0相当于C语言main函数的argv[0](2)$1、$2...这些位置参数相当于C语言main函数的argv[1]、argv[2]...(3)$#表示参数的个数(4)$@表示参数列表”$1“”$2"...,可用在for循环中的in后面。(5)$?上一条命令的状态(6)$$当

2017-07-15 17:14:50 574

原创 Shell脚本学习-语法篇(下)

Shell脚本学习-语法篇(下)1.函数在Shell当中,函数被理解为程序或小脚本,调用函数时可以传任意个参数列表,return返回值代表其退出码,被当做命令看待。函数定义中没有返回值也没有参数列表。函数体的左花括号{和后面的命令之间必须有空格或换行,如果将最后一条命令和右花括号}写在同一行,命令末尾必须有;号。函数的简单使用:2.Shell脚本的调试方法

2017-07-15 16:33:20 517

原创 Shell脚本学习-语法篇(上)

Shell脚本学习-语法篇(上)一、条件测试1.条件测试:test [命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的退出状态为0,如果测试结果为假,则为1(与C语言的逻辑刚好相反)。[是一个命令的名字,传给命令的各个参数之间应该用空格隔开。测试命令:[ -d DIR ]:如果DIR存在并且是一个目录则为真[ -f FILE ]:如果FILE存在且

2017-07-15 15:20:48 2847

原创 Shell脚本入门

Shell脚本入门1.基本概念Shell是一门弱类型、解释型、非编译型语言。Shell中无数据类型。Shell的作用是解释执行用户的命令,Shell执行命令的方式有两种(1)交互式:用户输入一条命令,shell就解释执行一条;(2)批处理:用户事先写一个Shell脚本,其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条的敲命令。2.shell执行脚本Sh

2017-07-13 17:04:18 8005

原创 shell脚本的命令代换

命令代换一、命令代换命令代换是指先完成引号或者括号中的命令行,然后将其结果替换出来,在重新组成新的命令行。shell脚本中用于命令行代换的一反引号(` `),和$()。那么这两个又有什么不同呢?运行后:表面上看起来两个结果并没有什么不同,但仔细分析会发现有以下不同点。反引号(` `)的缺点(a)它非常容易和单引号混淆(b)它会对\进行跳脱处理,而$()不

2017-07-13 11:14:21 716

原创 I/O多路转接之poll

I/O多路转接之poll与select使用三个位图来表示三个fdset的方式不同,poll使用一个pollfd的指针来实现。poll解决了select两个重要的问题:(1)poll服务器在处理文件描述符个数上理论上无上限;(2)poll服务器将输入参数与输出参数进行分离,不用每次使用时进行重新设置。函数形式:int poll(struct pollfd *fds,nfds_

2017-07-12 16:25:02 261

原创 调研tcp定时器

调研tcp定时器TCP使用四种定时器(Timer,也称为“计时器”):(a)重传计时器:Retransmission Timer(b)坚持计时器:Persistent Timer(c)保活计时器:Keeplive Timer(d)时间等待计时器:Time_Wait Timer。(1)重传计时器:重传定时器:为了控制丢失的报文段或丢弃的报文段,也就是对

2017-07-11 15:27:46 242

原创 URG和PSH

URG和PSH1.基本概念URG和PSH属于tcp协议中的标志位。URG:表示本报文段中发送的数据是否包含紧急数据。URG=1,表示有紧急数据。后面的紧急指针字段只有当URG=1时才有效。PSH:告诉对方收到该报文段后是否应该立即把数据推送给上层。如果为1,则表示对方应当立即把数据提交给上层,不做处理。2.URG和PSH的特点及区别(1)URG的特点:紧急数

2017-07-11 14:22:54 370

原创 端口分类调研

端口分类调研1. 基本概念背景介绍网络中传输层具有复用和分用功能,应用层所有的应用进程都可以通过传输层送到IP层(复用),传输层从IP层收到数据报必须交付给指明的应用进程(分用),所以要想找到指明的应用进程则必须赋予其一个非常明确的标志。(1)我们知道在单个计算机中操作系统给每个进程都分配了一个进程标识符,但其运用这种方法在网络中给进程分配标志是不行

2017-07-11 09:05:52 563

原创 NAT技术与代理服务器调研

NAT技术与代理服务器调研一、NAT技术1. 基本概念NAT是地址转换协议,将内网地址转换为公网地址。简单的说,NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关处,将内部地址替换成公用地址,从而在外部公网(internet)上正常用,NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共IP地址紧缺的问题。2. N

2017-07-10 20:13:39 269

原创 常见的几种排序算法总结

常见的几种排序算法总结上篇博客主要介绍了几种排序的算法思想及代码实现,本篇主要对上篇进行总结。几种算法的时间复杂度及稳定性如下:(1)直接插入排序适用场景:一般不用在数据大于1000的场合下使用插入排序,或者重复排序超过200数据项的序列。当数据已经基本有序时,采用插入排序可以明显减少数据交换和数据移动次数,进而提升排序效率。(2)希尔排序适用场景:增量初始值不容易

2017-07-10 15:12:48 517

原创 常见的几种Sort排序算法

几种常见的Sort排序算法1. 排序的基本概念有n个记录的序列,其相应关键字的序列是,相应的下表序列是。通过排序,要求找出当前下标序列的一种排列,使得相应的关键字满足如下的非递减(或非递增)关系:,这样就得到一个按关键字有序的记录序列。2. 排序的分类常见的Sort排序可分为如下几种:3. 几种排序算法的具体介绍与实现(1)直接插入排序插入排序的基本思想是:在一

2017-07-02 14:07:42 8211

空空如也

空空如也

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

TA关注的人

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