- 博客(40)
- 收藏
- 关注
原创 Linux基础
OS功能:进程调度文件系统网络协议栈内存管理(最复杂)驱动程序安全功能 Linux用户:管理员root:拥有所有权限普通用户:使用非特权资源 Linux程序:管理命令普通命令 命令提示符(由shell提供):prompt管理员:#普通用户:$用户使用环境:通过改变环境变量的值
2016-02-26 18:19:43
360
原创 Linux文件属性
1、 Linux 文件属性Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容;解释:第一字段:inode第二字段:文件种类和权限;第三字段: 硬链接个数;第四字段: 属主;第五字段:所归属的组;第六字段:文件或目录的大小;第七字段和第八字段:最后访问或修改时间;第
2016-02-23 19:54:40
421
原创 Linux系统运行级别
Linux 的7 个运行级别 运行级别是指操作系统当前正在运行的功能级别。级别:0到6,具有不同的功能。级别定义位置:在 /etc/inittab 文件中,查看当前运行级别命令: runlevel 1. 运行级别原理介绍 A. 在目录 /etc/rc.d目录下包含了 7个名为rcN.d 的目录,每一目录对应一个运行级别 B. 在目录 /etc/rc.d目录下还有一
2016-02-23 19:38:29
537
原创 堆排序
建初始堆 方法一:(1)从最大下标的非叶子节点开始,比较其值和左右孩子的值,进行调整,同时对调整节点的子树递归地进行类似的做法;// 调整index节点及其子树,使其满足大根堆性质,void HeapAdjust(int *a,int index,int heap_size){ int left = 2*index; int right = 2*index + 1; int dest
2015-05-20 22:10:44
296
原创 n对括号有多少种匹配排列方式
n对括号有多少种匹配排列方式?比如一对括号有一种:();两对括号可以有两种:()()和(())相关知识: 卡特兰数#include using namespace std;//下述算法与没有利用到卡特兰数,只是单纯的将n对括号(共2n)个括号的所有可能排列形式的每一种进行判断,是否满足匹配;//当前位置的括号总是先(进入bracket,然后向下递归,递归至共有2n个括号,判断当前括号
2015-05-20 22:07:21
2399
原创 递减左旋数列中查找一个数
题目:一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}克移两位形成的,在这种数组中查找某一个数。分析:将这个数组{4,3,2,1,6,5}从任何位置分开得到的两个数组,则至少有一个数组单调递减,另一个数组则可以由某一个递减数组左移若干位得到(若要找的数在此数组中,则划分为了更小的子问题)。使用二分可以得到较高的查找效率,在二分之后确
2015-05-20 22:03:45
534
转载 memcpy函数的实现
实现void *memcpy(void *to, const void *from, size_t count)首先对这个函数做一些说明。#include void *memcpy(void *to, const void *from, size_t count)函数memcpy()从from指向的数组向to指向的数组复制count个字符。如果两数组重叠,不定义函数的行为。说明:1、f
2015-05-08 16:25:10
421
转载 进程间的通信方式
这部分参考文献2:详细内容打开链接看 程序员必须让拥有依赖关系的进程集协调,这样才能达到进程的共同目标。可以使用两种技术来达到协调。第一种技术在具有通信依赖关系的两个进程间传递信息。这种技术称做进程间通信(interprocess communication)。第二种技术是同步,当进程间相互具有合作依赖时使用。这两种类型的依赖关系可以同时存在。一般而言,进程有单独的地址空间。我们可以了
2015-05-07 15:13:45
285
原创 在二元树中找出和为某一值的所有路径(根节点到任一节点的路径)
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树 10 / \
2015-04-27 20:13:07
436
原创 输入一个整数和一棵二元树。求出从根节点到叶节点的路径长度中与输入整数相等的所有路径。
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径(必须为根到叶节点的路径)。例如输入整数22和如下二元树 10 / \
2015-04-27 20:11:04
943
原创 多继承(含虚函数覆盖)vftb中虚函数排列
#include #include #include #include using namespace std;//多继承(有虚函数覆盖)//1) 每个父类都有自己的虚表,有多少个父类就有多少个虚指针//2) 子类的所有虚函数地址被放到了第一个父类的虚函数表中(排列顺序:先基类虚函数地址后子类虚函数地址,若覆盖了第一个父类中的虚函数, 则地址变为派生类override的
2015-04-25 13:24:29
422
原创 多继承无虚函数覆盖下的vftb排列
#include #include #include #include using namespace std;//多继承(无虚函数覆盖)//1) 每个父类都有自己的虚表,有多少个父类就有多少个虚指针//2) 子类的虚函数地址被放到了第一个父类的虚函数表中(排列顺序:先基类虚函数地址后子类虚函数地址)。(所谓的第一个父类是按照声明顺序来判断的)class Base1{pub
2015-04-25 12:54:32
437
原创 单一继承下基类private虚函数
单一继承下基类private虚函数在派生类中能否访问??在用户程序中,派生类对象的虚指针指向的虚函数表中是仍然有基类private虚函数的条目,但是由于属性为private,无法实现正常的访问!//通过得到private虚函数的地址强制访问说明其确实存在于子类的虚函数表中!事实上,多态性与将实现多态的函数的访问限定符没有任何关系,private 函数仍然可以实现多态,它的指针仍然位
2015-04-25 11:13:57
586
原创 单一继承下虚函数覆盖时vftb的排列
#include #include #include #include using namespace std;//单一继承下有虚函数覆盖//派生类只有一个虚函数表,派生类对象只有一个虚指针来指向这个虚函数表。//虚函数表中按照基类虚函数(若派生类override基类的虚函数,则虚函数表中原先存放的基类虚函数的地址变为相应的派生的虚函数的地址)、派生类新增的虚函数顺序依次排列。
2015-04-25 09:57:02
461
原创 单一继承下无虚函数覆盖__虚函数表中的虚函数指针的获取(二)
#include #include #include #include using namespace std;//单一继承下无虚函数覆盖//派生类只有一个虚函数表,派生类对象只有一个虚指针来指向这个虚函数表。虚函数表中按照基类虚函数、派生类新增的虚函数顺序依次排列。//直接使用三级指针,第二次解引用时可以直接访问到虚函数地址。不需要像前面博客中一步步的类型转换。class
2015-04-24 18:53:45
281
原创 单一继承下无虚函数覆盖__虚函数表中的虚函数指针的获取
#include #include #include #include using namespace std;//单一继承下无虚函数覆盖//派生类只有一个虚函数表,派生类对象只有一个虚指针来指向这个虚函数表。虚函数表中按照基类虚函数、派生类新增的虚函数顺序依次排列。//要注意的是一旦将指针p转换成void*(或void**)时,*p(或**p会由于编译器不知道指向内存大小而出错
2015-04-24 17:36:21
393
原创 一级指针和二级指针
#include using namespace std;int main(){ // q指向的3个连续int的内存的首地址,也即第一个int的地址。 int *q = (int*)malloc(3*sizeof(int)); cout<<q<<endl; //这三个int中第一个int的地址 //q+1指向的是第二个int的内存地址(而不是q所指3个int内存空间之后的第4个i
2015-04-15 16:45:15
279
转载 struct对齐方式
结构体的内存分配原则 原则1、数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。 原则2、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开
2015-04-12 16:51:36
366
转载 explicit关键字
http://www.cnblogs.com/ymy124/p/3632634.html首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来
2015-04-12 10:12:47
341
转载 auto_ptr
转自http://www.cppblog.com/SmartPtr/archive/2007/07/05/27549.htmlauto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包的智能指针,这个不怎么智能的智能指针难免会黯然失色。诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用
2015-04-09 21:56:53
276
原创 虚函数的重载和重新定义
对于虚函数的重载,若在派生类中仅改变函数返回值,则编译器不允许!(这与非虚函数不同,非虚函数在派生类中若只改变返回值,是允许的,且隐藏基类的所有同函数名的版本) 其他情况则和非虚函数相同,只要派生类中对基类虚函数重新定义(函数体改变或参数类型或参数个数改变),基类的所有同函数名的重载版本均被隐藏,只有派生类中的重新定义的版本可直接使用!#include #include #inc
2015-04-09 21:29:32
1721
原创 基类和派生类非虚函数和成员变量的同名
对于子类和父类如果拥有同名的data member 或者non virtual 成员函数,会如何处理?如果data member是static类型的又有何不同?(实际上体现了对继承的深刻理解) 对于这样的同名non virtual 函数或者 成员,实际上由指针或者对象的类型决定了访问的具体是哪个?如果使用子类类型的对象或指针,则只能看到子类里的哪个函数或者成员,对于父类里的函数则会产
2015-04-09 21:23:09
599
转载 静态链接库和动态链接库
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE独立的 DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包
2015-04-08 15:58:46
260
原创 最长回文子串
解法一:暴力解法,取原字符串的每一个子串,判断子串是否为回文。 O(n^3)。 很多短子字符串在长子字符串中比较过,这导致了大量的冗余判断,根本原因是:对字符串对称的判断是由外向里进行的。string longestPalindrome(string s){ if (s.size()!= NULL) { string maxString; for (int
2015-03-30 14:51:19
236
原创 递归求两个数组的中位数(或下中位数)
描述 :已知递增有序数组a,b,长度分别为m,n。找出a,b(合并为一个大的有序数组后)的中位数(或下中位数)。要求时间复杂度为o(log(m+n)).分析 :对于数组a,若a的长度m为奇数,则a[(m-1)/2]即为中位数;若m为偶数,则a[(m-1)/2]为下中位数;可知若一个数为中位数,则它大于(m-1)/2 个数。 a,b总长度为m+n,则其中位数应该大于
2015-03-27 21:40:34
689
原创 有序数组A,B的中位数
//对于长度为n的数组,当n为奇数时,其中位数只有一个,下标为(n-1)/2; n为偶数时,其中位数有上中位数和下中位数,下标分别为n/2-1 , n/2.//已知有序数组A,B,长度分别为m,n。找出A,B(合并为一个大的有序数组后)中的中位数。要求时间复杂度为o(log(m+n)).//此题中,若m+n为奇数,则返回下标为(n-1)/2的数;若为偶数,返回上中位数和下中位数的平均数。/*
2015-03-27 21:39:22
321
原创 有序数组a,b,找出a,b(合并为一个大的有序数组后)中第k个数
//已知有序数组a,b,长度分别为m,n。找出a,b(合并为一个大的有序数组后)中第k个数。要求时间复杂度为o(log(m+n)).//当k = (m+n-1)/2时,若m+n为奇数,则第k个数即为中位数;若m+n为偶数,第k个数即为下中位数。/*#include #include using namespace std;int select_kth_num(int a[],int b
2015-03-27 21:35:34
443
原创 求两个等长有序数组的中位数
描述:两个排序的数组,长度都为n,求合并后的排序数组的中位数。注意,此题中两个数组的长度是相等的。#include #include using namespace std;int MedianOfTwoSortArray(int a[],int b[],int n){ if (n<=0) { return -1; } if (n==1) { return (a[0
2015-03-27 21:33:13
243
原创 数组旋转
题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 给定一个数组data[N]和一个数M,向右旋转M位,如,char data[]="abcde", M = 2,旋转以后data 应该为cdeab ;M=3,旋转后data为deabc。当M = N时,按照定义,将M=N个元素搬到数组尾部,此时数组又回到初始状态,没有发生变化;因此当M>N时,
2015-03-25 14:45:51
360
转载 仿函数续
不要试图获得仿函数的状态,或者讲不要试图通过仿函数来确定仿函数的某个值或状态试图从运用了仿函数的算法中获得数据或者结果的方式有两种,分别是显式写出传递的类型参数,使用引用。如下面的: list coll; IntSequence seq(3); generate_n >,int,IntSequence&>(back_inserter(c
2015-03-20 11:35:47
185
原创 哈希表
线性表、树中,记录在结构中的 相对位置是随机的,和记录的关键字之间不存在确定的关系。因此,查找的过程需要进行一系列和关键字的比较。查找的效率依赖于查找过程中所进行的比较次数。 希望的理想情况:不经过任何的比较,一次存取便能得到所查记录。必须在记录的存储位置和关键字之间建立一种一个确定的关系f, 使得每个关键字和结构中的一个唯一的存储位置相对应。只要根据对应关系f 就能找到给定K的像f(K
2015-03-20 10:00:13
270
转载 仿函数
一.仿函数,即行为类似函数的对象。又称为function object,实际上就是重载了()运算符例如class X{ public:return-value operator()(args) const { }}假如我们要实现一个函数int function(args1,args2);我们需要这么做X fo;fo(args1,arg
2015-03-19 17:09:07
432
原创 static/static const 的初始化
注意3点:1、类中的static 型 成员必须在类外部 初始化;2、类中的static const 型成员,若是整数型别(泛指),则既可以在类中也可以在类外初始化;若是非整数型别,只能在类外初始化;3、在类外部初始化不能加static关键字。
2015-03-16 21:28:37
242
转载 二进制中1的个数
//算法复杂度只与1的个数有关int main() { int num,i =0; cin>>num; //将num的二进制中从低位到高位中的1逐一变为0,当1均被处理,num变为0,退出while。 while (num) { num -= num&(-num); // 与该语句实现同样功能的
2015-03-10 16:57:38
249
转载 编程之美2.14 子数组的最大值拓展问题(首尾相连)
思路:问题的解可以分为两种情况:1)解没有跨过A[n-1]到A[0],即普通的求子数组和的最大值2)解跨过A[n-1]到A[0]对第二种情况,只要找到从A[0]开始和最大的一段(A[0],...,A[j])(0M_2=A[i]+...A[n-1]+A[0]+...+A[j]如果iM_2=A[0]+...+A[n-1] - 子数组和为负的最小值(数组元素全为正则返回0
2014-10-23 15:37:07
267
转载 关于或运算的一个题目
如果x = 2014,下面函数的返回值是(23) //二进制(unsigned int 32位)中0的个数。 int fun(unsigned int x) {int n = 0;While(x+1){n++;x=x|(x+1);} return n;}While循环终止的条件:当while循环里的x计算到unsigned int的最大值(即0
2014-09-25 16:59:23
391
转载 关于一个int *ptr=(int *)(&a+1)问题的探讨
main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出为:2,5请解释以上代码的输出结果。答案如下:*(a+1)其实很简单就是指a[1],输出为2.问题关键就在于第二个点,*(ptr-1)输出为多少?解释如下,&a+1不是首地址+1,系统
2014-09-25 16:58:02
310
转载 两个字符串的第一个最长公共子串
求两个串的第一个最长公共子串,如“shaohui”,“ahui”的最大子串为“hui”。方法一:1、将两个字符串中长度较长的那个字符串作为母串strOne,另一个作为子串strTwo。设置 数组mask[strOne.size()] = {0};用于记录在母串中找到的与子串strTwo匹配的公共子串的长度;maxlength = 0; end = 0(maxlength 记录当前找到的最
2014-09-23 21:20:53
398
转载 内存管理
内 存 分 配 方 式 有 三 种 :( 1 ) 从 静 态 存 储 区 域 分 配 。 内 存 在 程 序 编 译 的 时 候 就 已 经 分 配 好 , 这 块 内 存 在 程 序 的整 个 运 行 期 间 都 存 在 。 例 如 全 局 变 量 , s t a t i c 变 量 。( 2 ) 在 栈 上 创 建 。 在 执 行 函 数 时 , 函 数 内 局 部 变 量 的 存 储
2014-09-22 20:03:39
378
转载 找出一个数组中出现次数超过一半的那个数字,要求时间复杂度O(n)和空间复杂度为O(1)。
数组中超过出现次数超过一半的数字题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。 分析:编程之美上也有这道题,不过它变换了题目的表述形式,如下:寻找发帖水王:Tango是微软亚洲研究院的一个试验项目,如图2-1所示。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”
2014-09-22 19:31:16
5226
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人