自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 判断一个节点是否在一棵二叉树中

判断一个节点是否在一棵二叉树中(递归算法): bool IsExsitNode(Node* node) { return _IsExsitNode(_pRoot,node); } bool _IsExsitNode(Node* pRoot,Node* node) { if(pRoot == NULL || node == NUL

2017-07-31 18:30:06 622

原创 二叉树镜像(递归和非递归)+ 判断一棵二叉树是否是平衡二叉树+ 判断一棵树是否为完全二叉树

二叉树镜像(递归和非递归):// 求二叉树的镜像:非递归 void GetBinaryMirror_Nor() { if(_pRoot == NULL) return; stack s; s.push(_pRoot); while(!s.empty()) { Node* pCur = NULL; pCur = s.top(); s.pop();

2017-07-26 00:46:04 1541

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

//前序 void PreOrder_Nor() { if(_pRoot == NULL) return; stack s; s.push(_pRoot); while(!s.empty()) { Node* pCur = NULL; pCur = s.top(); cout_data<<" "; s.pop(); if(pCur->_p

2017-07-26 00:36:43 297

原创 实现一颗二叉树的层序遍历

二叉树的层序遍历(队列实现):// 层序遍历 void LevelOrder() { if(_pRoot == NULL) return; queue q; q.push(_pRoot); while(!q.empty()) { Node* pCur = NULL; pCur = q.front(); q.pop(); cout_data<

2017-07-22 22:13:06 348

原创 求二叉树叶子节点的个数+求二叉树第k层的节点个数

求二叉树叶子节点的个数、求二叉树第k层的节点个数: //二叉树的高度 size_t Height() { return _Height(_pRoot); } //访问叶子结点 size_t GetLeafNode() { return _GetLeafNode(_pRoot); } //求某一层的结点个数 size_t GetKLevelNode(size

2017-07-22 21:38:02 404

原创 1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】

1.判断两个链表是否相交,若相交,求交点。(假设链表不带环) / 判断两个单链表是否相交(链表不带环)int IsListCross(PNode L1, PNode L2){ if(L1 == NULL || L2 == NULL) return 0; while(L1->_pNext) { L1 = L1->_pNext; } while(L2->_pNext) {

2017-07-18 13:41:37 285

原创 判断链表是否带环?若带环求环的长度?若带环求环的入口点?并计算以上每个问题的时间复杂度?

1、怎么判断一个单链表是否带环         如果单链表带环,那么从链表头开始时遍历就会进入死循环。可以用两个速度不同的指针,先让两个指针pFast和pSlow同时指向pHead,然后每次使pFast走两步,使pSlow走一步,只要链表带环,那么pFast和pSlow总会相遇。// 判断链表是否带环,若带环给出相遇点PNode HasCircle(PNode pHead){ PNo

2017-07-17 22:00:29 508

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

删除一个单链表的非尾结点,并且不能遍历链表,所以我们可以尝试删除其他结点以代替此节点,在这里,我们用要删除的结点的下一个结点来代替此节点,删除下一个结点之前,先将这个节点保存起来,再把此结点的值域和指针域赋值给原本要删除的结点,这样一来,只用删除当前被保存起来的结点即可。部分代码:// 删除单链表的非尾结点void DeleteNotTailNode(PNode pos){

2017-07-17 14:52:46 286

原创 查找单链表的倒数第k个节点,要求只能遍历一次链表

源文件:#include "LinkList.h"#include #include // 在单链表的尾部插入一个节点void PushBack(PNode* pHead, DataType data){ PNode pCurNode = NULL; PNode pNewNode = NULL; assert(pHead); pNewNode = BuyNode(da

2017-07-15 19:56:05 495

原创 逆置/反转单链表

typedef int DataType;typedef unsigned int size_t;#define NULL 0typedef struct Node{ DataType _data; struct Node* _pNext;}Node, *PNode;#include "LinkList.h"#include #include // 在单链表的尾部插入

2017-07-15 18:27:03 211

原创 合并两个有序链表,合并以后的链表依旧有序

头文件:typedef int DataType;typedef unsigned int size_t;#define NULL 0typedef struct Node{ DataType _data; struct Node* _pNext;}Node, *PNode;// 在单链表的尾部插入一个节点void PushBack(PNode* pHead, DataTy

2017-07-15 16:32:02 451

原创 端口分类调研

在一台主机上运行了多个服务,主机为了区分这些服务,所以给每个服务都分配一个端口号,端口号唯一的标识这台主机上的某个服务。 IP地址唯一标识网络上的一台主机,服务器用通过端口号来区分不同的网络服务。所以IP地址+端口号就表示网络中唯一的一个服务。 客户端通常对它所使用的端口号并不关心,只要保证该端口在本主机上是唯一的就可以了。所以客户端端口号又叫做临时端口号,这是因为他们通常只是在用户运行该客户程序

2017-06-26 17:25:49 289

原创 TCP握手与挥手

1.为什么连接的时候是三次握手,关闭的时候却是四次握手? 因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有

2017-06-26 17:23:25 177

原创 ARP脚本

1、ARP是什么ARP(Address Resolution Protocol)即地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。2、ARP的功能

2017-06-26 17:21:27 194

原创 gdb调试多线程多进程程序

gdb多进程:多进程时,进入调试状态后,默认调试主进程。 1. 查找fork出子进程的代码在第几行,然后打上断点。 2.运行至断点处,info feriors可查看当前调试的进程 3.设置follow-fork-mode 的值为child,表示只调试的子进程,再查看当前调试进程发现变成了新产生出来的进程,即子进程。follow-fork-mode(默认值是p

2017-06-26 13:45:59 206

原创 NAT技术与服务器调研

NAT技术-网络地址转换来源:在Internet网上广泛使用的IPV4技术由于NAT技术,中文翻译为网络地址转换。该技术产生的原因:IPv4地址危机,在Internet上应用广泛的IPv4技术,由于其先天性不足,在九十年代初期时,已经预计到了IPv4地址不足,从而开始开发IPv6技术。但开发IPv6需要足够的时间,为了延长IPv4技术的使用时间,产生了NAT技术。 NAT技术不仅解

2017-06-26 13:37:52 642

原创 CRC校验

CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。基本原理:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这

2017-06-09 23:51:37 661

原创 crond和crontab调研

一、crond的简介及用法。   crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。crond定时任务服务就像我们早上使用的闹钟一样 。查看crond服

2017-06-09 23:28:50 264

原创 守护进程

守护进程(daemon):Linux中的守护进程是一种特殊进程。它独立于控制终端并且周期性的执行某种任务或等待处理某些事件的发生。Linux中大多数服务器就是守护进程实现的。例如: internet服务器中inetd, Web服务器中的http。守护进程也完成一些系统任务如作业规划进程crond。 后台进程一般具有的性质是无输入输出,持久的运行着。linux启动时会启动很多系统

2017-06-09 23:13:52 271

原创 日期类

#include using namespace std;class Date{public: Date(int year = 2017, int month = 1 , int day = 1) //构造函数 :_year(year) ,_month(month) ,_day(day) { if(!(_year > 0 && (_month > 0 && _mont

2017-03-02 21:03:02 226

转载 Linux下的管道容量及其实现机制

1、管道外部实现         我们定义一个管道时,这个管道是由内核管理的一个缓冲区,可以抽象为现实生活中的一个传输线路。管道的一端连接一个进程的输出,这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息。当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会等待,直到另一端的进程取出信息。当

2017-02-27 18:46:41 304

原创 Linux下的权限

linux系统内有档案有三种身份 u:拥有者  g:群组   o:其他人这些身份对于文档又有下面权限 可以用ls -l 文件名 查看权限信息r:读权限,用户可以读取文档的内容,如用cat,more查看w:写权限,用户可以编辑文档x:该目录具有可以被系统执行的权限s root执行s权限是'使用root用户执行'的权限。在这里使用 chmod +s filename 和

2017-02-27 17:30:59 241

原创 atexit函数简介

按照ISO C的规定,一个进程可以登记多达32个函数,这些函数将由exit自动调用.通常这32个函数被称为终止处理程序,并调用atexit函数来登记这些函数,atexit()注册的函数类型应为不接受任何参数的void函数,当程序通过调用exit()或从main 中返回时, 参数function 所指定的函数会先被调用, 然后才真正由exit()结束程序。       atexit函数简介:

2017-02-27 17:11:12 452

转载 task_struct结构体字段

Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息,它定义在linux-2.6.38.8/include/linux/sched.h文件中。对task_struct这个结构体进行各个字段的详细介绍:1. 调度数据成员(1) volatile long states;表示进程的当前状态:? TASK_RUNN

2017-02-27 15:44:05 224

转载 常见的进程调度算法

操作系统使用的进程调度算法、怎么验证???常见的进程调度算法:    进程调度,用户进程数进程调度一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。无论是在批处理系统还是分时系统中,用户进程数  进程调度 一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中

2017-02-22 23:17:45 406

原创 vim的详细配置

map :call SaveInputData()func! SaveInputData() exec "tabnew" exec 'normal "+gP' exec "w! /tmp/input_data"endfunc "colorscheme torte"colorscheme murphy"colorscheme desert "colors

2017-02-18 21:26:34 481

原创 简单的进度条

回车与换行:    回车\r本义是光标重新回到本行开头,r的英文是retrun;    换行\n本义是光标往下一行(不一定到下一行行首),n的英文是newline。    在Windows下,换行就是另起一行,回车就是回到一行的开头,所以我们在平时编写文件时的回车符确切说是回车换行符(Enter键),即实现换行需要\r\n;而在Linux下只需要\n就可以做到回车换行。缓冲区:

2017-02-18 20:38:04 289

原创 Linux下三类时间、touch更改时间和find命令的使用

三类时间:  ctime(Change):文件状态最新改变的时间,文件的一些基本属性,如权限、用户、组、大小、修改时间等,这些属性改变了,ctime就会发生改变,如修改文件的权限或者所有者等等信息的时候,就会改变文件的ctime。  atime(Access):最近一次访问时间,+n为查找n天以前的文件,-n为查找n天以内的文件,进行读文件操作时,atime会被改变。  mtime(M

2017-02-18 14:51:26 982 1

空空如也

空空如也

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

TA关注的人

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