- 博客(39)
- 收藏
- 关注
原创 一棵树是否是另一棵树的子树问题
判断一个节点是否在一棵二叉树中//判断一个节点是否在一棵二叉树中 bool IsInBinaryTreeNode(BinaryTreeNode* root, BinaryTreeNode* Node) { bool res = false; if (root->_data == Node->_data) res = true; if (!
2017-07-27 18:32:42
572
原创 eval && 倒引号 && $()
倒引号倒引号的表示“,也叫反引号。 倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令,并以它的标准输出结果取代整个倒引号部分。 如: shell在执行此条命令时,先执行倒引号中的命令date,将输出结果取代$today。 利用倒引号的这种功能可以进行命令置换,即把倒引号括起来的命令的执行结果赋给指定变量。进行命令置换时,可以是单条命令,也可以是多条命令的组
2017-07-10 20:46:28
538
原创 shell脚本实现进度条&&1到100之和&&求最大最小值
进度条在之前C语言的时候写过一个进度条,那个进度条实现之前要理解两个知识(缓冲区和回车换行) shell脚本之所以简单就是比C的要求更低 在shell里只需要知道回车就好,printf是条命令就没有缓冲区可言 代码: 结果: 1到100的求和不只打印结果,显示:1+2+……+100=5050 代码: 结果: 求最大最小值要求:在命令行输入的数字进行比较,并且编写函数 代码:
2017-06-28 16:57:50
932
原创 TCP相关基础知识
TCP的特点及首部格式TCP是一种面向连接的、可靠的协议。 是TCP/IP体系中非常复杂的协议,也是非常重要的协议。 它的特点: 1)、TCP是面向连接的运输层协议。 2)、每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。 3)、TCP提供可靠交付的服务。 4)、TCP提供双全工通信。 5)、面向字节流。TCP报文段的首部格式: (1)源端口和目的端口:各占两个字
2017-06-19 19:34:36
455
原创 路由算法
路由算法路由算法,又名选路算法,可以根据多个特性来加以区分。算法的目的是找到一条从源路由器到目的路由器的“好”路径。算法设计者的特定目标影响了该路由协议的操作;具体来说存在着多种路由算法,每种算法对网络和路由器资源的影响都不同;由于路由算法使用多种度量标准,从而影响到最佳路径的计算。关于路由器如何收集网络的结构信息以及对之进行分析来确定最佳路由,有两种主要的路由算法: 总体式路由算法和分散式路由算
2017-06-18 23:47:06
1672
原创 CRC校验
什么是CRC校验?CRC校验即循环冗余校验。它可以发现并纠正信息在存储或传送过程中连续出现的多位错误码。 CRC码是基于模2运算而建立编码规律的校验码。其规律如下: 1)、模2加和模2减的结果相同的。(1±0 = 1、1±1 = 0、0±1 = 1、1±1 = 0) 2)、模2乘是按模2和求部分积之和。 3)、模2除是按模2减求部分余数。每求一位商应使部分余数减少一位。上商的原则是:当部
2017-06-18 23:19:27
1147
原创 信号屏蔽pending
信号的产生1、键盘产生的信号,只能发送到前台。(如:ctrl+c、ctrl+z、ctrl+\) 2、软硬件的异常。(指针异常、除0等) 3、进程调用kill 命令或kill函数。在Linux下查看信号 kill -l 可以查看共有62个信号。1-31为普通信号,34-64为实时信号一个进程是或否收到1-31号的信息?用什么数据结构比较好? 答:位图(32个bit位)。其中比特位的位置是信
2017-06-14 17:33:15
1044
原创 线程的互斥与死锁问题
线程的互斥 图中g_count是全局变量,从0开始。线程1和线程2对g_count进行++(5000次)操作。 如果线程1刚拿到g_count,被切断,然后线程2进行对g_count进行++,然后被g_count++到5000,线程2结束,此时将g_count变为了5000,再进行线程1操作,此时线程1拿到了最开始的0,就从0开始++,结果将g_count覆盖。 正常结果应该加到10000,但
2017-05-25 17:43:29
1370
1
原创 哈希表的扩展-布隆过滤器
布隆过滤器的简介什么是布隆过滤器?布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。为什么会出现布隆过滤器?在日常生活中,包括在设计计算机软件时,我们经常判断一个元素是否在一个集合中。比如:要检查一个单
2017-05-16 10:55:23
515
原创 文件描述符与文件指针
文件描述符(fd)文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。什么是文件描述符?进程利用文件描述符来访问文件。文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,进程就返回一个文件描述符。每个linux进程都应该有三个标准的文件描述符,对应三个标准流。
2017-05-11 16:43:08
544
原创 智能指针
什么是智能指针智能指针是C++中的重点之一,这也是在笔试面试中爱考的知识点 理清智能指针十分重要说起智能指针最先要提的就是RAII RAII全称Resource Acquistion Is Initialization 定义一个类来封装资源的分配和释放,在构造函数完成资源 的分配和初始化, 在析构函数完成资源的清理,可以保证资源的正确初始化和释放。那么什么是智能指针?为什么会有智能指针?智能
2017-05-09 16:18:54
433
原创 BitSet位图
存储空间的计算1int为4个字节(byte) 1byte为8个 比特位(bit) 1kb = 1024 byte 1Mb = 1024 kb 1Gb = 1024Mb 1Tb = 1024Gb位图腾讯题:给40亿个不重复的无符号整型,没排过序。如何快速判断这个数存不存在? 如果内存允许,可以先进行排序,再用二分查找进行查找。但是40亿个无符号整型存储在内存中需要16G。 如果用位图
2017-05-03 10:58:33
410
原创 HashTable哈希表/散列表(哈希桶)
哈希桶的结构处理哈希冲突的开链法/拉链法 —-哈希桶 使用素数做哈希表的长度,可以降低哈希冲突 哈希桶的插入、删除、查找
2017-05-02 11:27:04
1448
原创 HashTable哈希表/散列表(线性探测和二次探测)
HashTable的简单介绍HashTable是根据关键字直接访问在内存存储的数据结构。 HashTable叫哈希表或者散列表。 它通过一个关键值的函数将所需的数据直接映射到表中的位置来访问数据,这个映射函数叫散列函数(哈希函数),存放记录的数组叫散列表(哈希表)。比如: 给定一字符串“abckhdgubhkacdggk”找出第一次只出现一次的字符。
2017-04-24 17:35:07
25336
2
原创 进程退出、僵尸进程、孤儿进程
1、进程退出atexit函数称为终止处理程序注册程序 在Linux下 man atexit 就可以查看atexit的用法。 函数的用法和返回值int atexit(void (*function)(void)); 注册函数fun1(),用atexit调用,调用了以后先不执行fun1,而是先记住,进程退出后,再运行fun1的这个函数。
2017-04-17 22:12:44
848
原创 Task_struct结构体
Linux系统中的每个进程都有一个名为task_struct的数据结构,它相当于“进程控制块(PCB)”。 内核在为每个进程分配Task_struct结构的内存空间时,实际上一次性分配两个连续的 内存页面(共8KB),其底部约1KB空间存放Task_struct结构,上面的7KB空间存放进程系统空间堆栈。 Test_struct结构字段介绍
2017-04-16 23:29:07
876
原创 复杂链表的复制
什么是复杂链表复杂链表就是,有一个单链表有两个指针,一个指针指向下一个节点,另一个指针指向任何节点,可以是指向空,可以指向自己,可以指向链表中的任意节点。 复杂链表的结构有两个指针,一个next,一个random,还有一个数据。
2017-04-12 12:01:48
288
原创 配置vim后,进行一个简单的进度条实现
配置vimvim是Linux下的一个编辑器,在没有vim配置下,编写程序时,就像在Windows下在记事本写程序一样。但是vim很强大,它允许我们进行各种配置以及安装插件。 所以配置vim很重要,下来和我一起配置vim吧。 配置vim以前进入写代码时,回车换行后,光标是下一行的开头
2017-04-10 18:43:29
575
原创 红黑树
红黑树的概念和性质概念:红黑树是一棵二叉搜索树,它在以前的搜索二叉树的基础上每个节点上增加了一个存储位来表示节点的颜色,可以是红的或黑的。通过对任何一条从根到叶子简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似于平衡。 红黑树的性质: 1. 每个节点,不是红色就是黑色的 2. 根节点是黑色的 3. 如果一个节点是红色的,则它的两个子节点是黑色的…
2017-04-08 20:23:51
544
原创 AVL树(平衡二叉树)
AVL树的概念一棵AVL树,要么是空树,要么是具有下列性质的二叉搜索树:它的左子树和右子树都是AVL树,且左子树和右子树的高度之差的绝对值不超过1。平衡因子每个节点都有一个平衡因子,任一节点的平衡因子是-1,0,1。每个节点的平衡因子等于右子树的高度减去左子树的高度。AVL树的效率如果一棵搜索二叉树的高度是平衡的,它就是AVL树。如果它有N个节点,它的高度保持在O((log2)N)
2017-04-06 20:48:35
437
原创 搜索二叉树
搜索二叉树的性质 1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关 键码互不相同。 2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。 3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。 4. 左右子树都是二叉搜索树。
2017-04-03 15:53:05
376
原创 linux中的find指令以及黏滞位
find指令Linux中find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了很多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。find真的非常重要。命令格式 find [查找目录] [查找规则] [查找完后的操作]
2017-03-30 21:37:23
271
原创 Linux中权限问题以及文件的三个时间
在linux里,有一种思想叫一切皆文件,大致意思就是把什么都可以看做是文件。文件的访问者分为三类:1.u 文件和文件目录的拥有者2.g 文件和文件目录的所有者所在的组的用户3.o 其他用户文件访问的基本权限有四种:1.r 可读2.w 可写3.x 可执行4.- 表示不具有该权限那么,进入一个目录需要什么权限?了解一点linux的人都知道,在l
2017-03-23 19:04:03
392
原创 堆的创建,插入,删除
堆(Heap)可以视为完全二叉树它的数据结构就是数组对象,在堆中,都是以下标进行访问的。堆分为: 最大堆:每个父节点的都大于孩子节点。 最小堆:每个父节点的都小于孩子节点。代码实现:
2017-03-23 16:19:29
316
原创 线索化二叉树
二叉树是一种非线性结构,遍历二叉树几乎都是通过递归和借助栈完成的。二叉树作为存储结构时,取到一个节点,只 能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。于是,为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息。这就是二叉树的线索化。中序线索化:前序线索化:后序线索化:代码
2017-03-23 08:45:22
378
原创 二叉树的补充(非递归遍历)
上篇写了二叉树的递归遍历(前序,中序,后序)。但递归也有缺点:递归太深,空间有限,会导致栈溢出。(这个栈是内存管理分段、局部对象存储区域,属于操作系统内容)递归也可以转为非递归。其中有两种方法:第一种:将递归转为循环。比如:斐波那契数列和求前N项和。第二种:用栈进行解决。(这个栈是数据结构中的)不是所有递归都能用循环实现,比如:单链表的逆序打印和二叉树的遍历。下面的
2017-03-21 20:47:19
738
原创 二叉树的存储方式和遍历方式
二叉树:二叉树的每个节点至多有两个子树。如这个二叉树,其中1,2有两个子树,3只有左子树,5有右子树,4,6,7没有子树。二叉树有两种存储方式:第一种,数组表示。用数组存储方式就是用一组连续的存储单元存储二叉树的数据元素。 两颗树分别用数组表示为:
2017-03-20 17:46:17
22252
原创 对称矩阵和稀疏矩阵以及它们的压缩存储
介绍两种矩阵,以及这两种矩阵压缩存储并且使用C++实现它们矩阵可以看为二维数组,存储与访问就和二维数组一样。
2017-03-17 12:17:27
2066
原创 C++实现斐波那契数列 时间复杂度 空间复杂度
斐波那契数列我写了四种实现方法:第一种:递归实现long long Fib(int n)//递归{ if (n < 2) { return n; } return Fib(n - 1) + Fib(n - 2);}时间复杂度:O(2^n)空间复杂度:O(n)第二种:非递归实现long long FibNouR(int n)//非递归{ long long f
2017-03-01 12:40:30
2085
原创 折半查找c++的两种方法实现
折半查找在数据结构算法中是一个比较实用的算法。但是它是一个只能用于查找有顺序的数,这并不影响它的使用,可以先实现一个排序再进行查找。折半查找比较简单,但是注意的点也比较多。下面我将用递归和非递归两种方法进行实现。
2017-03-01 11:49:33
6072
原创 设计链表进行插入、删除(面试题)
就链表有多种单链表、双链表、双向循环链表、带头结点的单链表、带头结点的双向链表、带头结点的双向循环链表本次我运用带头结点的双向循环链表同时运用模板实现代码如下:List.h#pragma once#include #include using namespace std;template struct ListNode{ T _data;/
2017-02-20 14:46:12
543
原创 C++菱形继承面试题
问题:1.虚拟继承的作用 2.底层的工作原理1.作用:#include using namespace std;class AA{public: int _aa;};class BB : public AA{public: int _bb;};class CC : public AA{public: i
2017-02-15 20:38:33
554
原创 为什么c++支持重载而C语言不支持重载
学过C语言和C++的人都知道,C++支持函数重载而C语言不支持函数重载。而所谓的函数重载就是指:在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同或类型不同),返回值可同可不同。那么问题来了,为什么C++支持函数重载,而C语言不支持呢?从代码的编译到运行,在VC6.0或VS这种编译器下,它是系统直接完成了翻译与链接,直接生成了运行结果。编译器内部完成了翻译部分:
2016-12-17 17:43:51
4639
2
原创 注释转换
C语言的注释 /*C语言*/C++的注释 //C++本文写的注释转换是将C语言注释转换为C++注释大概有这几种情况//1.一般情况/* int i = 0; *///2.换行问题/* int i = 0; */ int j = 0;/* int i = 0; */int j = 0;//3.匹配问题/* i
2016-12-13 23:26:37
316
原创 选择排序
#include #include void my_select(int *arr,int len){ int i = 0; int j = 0; int max = 0; for(i = 0; i<len; i++) { for(j = 0; j<9-i; j++) { if(arr[max] < arr[j]) { max = j
2016-11-12 20:46:15
244
原创 冒泡排序
#include #include #include #include void swap(int *x,int *y){ *x ^= *y; *y ^= *x; *x ^= *y;}void print_printf(int *arr,int len){ int k = 0; for(k=0; k<len; k++) { printf("%d ",arr[k])
2016-11-12 20:44:03
209
原创 宏和函数的区别
宏非常频繁的运用于执行简单的计算。那么,为什么不用函数呢?1.宏在使用时比函数在程序的规模和速度更胜一筹。2.函数的参数必须申明为一个特定的类型,于是它只能在类型合适的表达式使用。而宏为无类型替换。而有些情况只能用宏,就是按类型申请空间时。如:#define MALLOC(n,type)\ ((*type)malloc ((n)*sizeof(type)));//调用
2016-10-18 22:07:31
297
原创 预处理标识符
__LINE__ 、__FILE__、__DATE__、__TIME__预定义符号解释及用法。注:一定是前后两个_。__LINE__ //显示文件当前的行号示例:#include #include int main(){ printf("%d\n",__LINE__); system("pause"); return 0;}__FILE__//进行编译的源文件
2016-10-17 22:57:38
459
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人