
C/C++
run_bear
但凡未得到,但凡是失去,总是最登对
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
sizeof和strlen的区别
1、sizeof是关键字,strlen是函数;2、sizeof计算类型占用的字节数,strlen计算字符串长度;3、数组做sizeof的参数不退化,传递给strlen就退化为指针了;4、sizeof参数可以是数组、指针、类型、对象、函数等,strlen只能用char*(字符型指针)做参数,且必须是以'\0'结尾的(返回的长度不包括'\0');当参数分别如下时,sizeof返回的值表原创 2017-02-21 20:27:33 · 322 阅读 · 0 评论 -
面试题----单链表带环问题
关于单链表带环问题:1、怎样判断一个单链表是否带环; 2、如果带环,环的长度怎么计算;3、如果带环,怎么求环的入口;1、怎样判断一个单链表是否带环:我们知道,单链表如果带环,那么从链表头开始遍历就会进入死循环。其实我们可以用上篇博客中提到的两个指针移动的思想来求解,在这里可以让两个指针移动速度不同,首先令两个指针fast和slow同时指向链表头部,然后每次使fast走两步原创 2017-07-17 01:18:18 · 431 阅读 · 0 评论 -
删除无头单链表的非尾节点
删除无头单链表的非尾节点:可以转化为删除该节点的下一个节点,删除之前把之传给该节点即可。可以不要返回值,此处我加上返回值信息是为了判断是否删除成功。 int DelNotTail(Node* pos) //删除非尾节点{ if(pos == NULL || pos->_next == NULL) return -1; else //让pos保存po...原创 2017-07-20 14:52:38 · 356 阅读 · 0 评论 -
面试题---从尾到头打印链表
看到这道题,我们肯定会想到要遍历链表。遍历链表的顺序是从头到尾,输出却要从尾到头,相当于说第一个遍历的节点最后一个输出,最后遍历的节点第一个输出。这样我们会想到先进后出----栈,先让所有元素都入栈,出栈的时候顺便打印输出就可以了。而递归本质上也是一个栈结构,所以递归也可以解决问题。void PrintListTailToFront_Stack(Node* pHead) //从尾到头打印原创 2017-07-20 14:57:01 · 309 阅读 · 0 评论 -
面试题----判断两个链表是否相交(可能带环)
判断两个链表是否相交(可能带环):这个问题我们可以根据是否带环来分三种情况,情况一:两个链表都不带环; 情况二:其中有一个链表带环; 情况三:两个链表都带环。下面我用一张图片来进行更详细的分类,之后写代码也是按照这种划分思想。原创 2017-07-17 14:48:18 · 533 阅读 · 0 评论 -
用两个栈实现一个队列
栈的顺序是先进后出,队列则是先进先出。假设两个栈分别为stack1和stack2,入队列相当于在stack1中入栈,出队列时将stack1中的元素全部搬到stack2中,然后在stack2中出栈,如果stack2中没有元素了,就去stack1中搬元素。template class CQueue{public: CQueue(); ~CQueue(); void push_queu原创 2017-07-21 15:22:51 · 297 阅读 · 0 评论 -
二叉树的几种遍历方式
二叉树遍历可以分为深度优先遍历和广度优先遍历;其中深度优先又可根据访问根节点的次序不同分为:先序遍历(前序遍历)、中序遍历和后序遍历;前序遍历:根----->左子树---->右子树中序遍历:左子树---->根----->右子树后序遍历:左子树---->右子树----->根以下是递归的代码://前序遍历(递归)void _PreOrder(Node* _pRoot)原创 2017-07-27 14:31:39 · 395 阅读 · 0 评论 -
二叉树的镜像(递归和非递归)
二叉树的镜像原理很简单,就是左子树变成右子树,每个节点都遵循这个原则就是镜像,直接来看代码 //二叉树镜像(递归) void _GetBinaryMirror(Node* _pRoot) { if (_pRoot == NULL) return; Node* pCur = _pRoot; if (pCur->_pLeft == NULL && pCur->_pR原创 2017-07-27 14:35:30 · 869 阅读 · 0 评论 -
判断一棵二叉树是不是完全二叉树
判断是否是完全二叉树:找到第一个度不为2的节点标记起来,如果后面的节点还有孩子则不是完全二叉树bool _IsCompleteBinaryTree(Node* _pRoot) { if (_pRoot == NULL) return true; Node* pCur = _pRoot; if ((pCur->_pLeft == NULL) && (pCur->_pRigh原创 2017-07-27 14:37:31 · 647 阅读 · 0 评论 -
查找单链表中倒数第k个节点
查找单链表中倒数第k个节点,拿到这道题,我们首先肯定能想到先遍历链表得到节点总数n,然后再去从头往后走n-k+1步就能得到想要的节点。这种方法当然是可行的,也是比较容易想到的方法,但是有的宝宝就会想这样做要遍历两次链表,有没有什么方法只遍历一次链表就能找到节点办法当然还是有的,我们可以利用两个指针遍历链表。刚开始把两个指针pAhead和pBhead都放在链表的头指针处,让pAhead向后走k步原创 2017-07-15 19:23:21 · 2171 阅读 · 1 评论 -
单链表的逆置(翻转)
给定一个单链表,我们怎么让它逆置呢?我的思想是利用指针的移动来做。当然首先我们必须考虑到一种特殊情况:这个链表中没有元素或者只有一个元素,那么这个链表逆置之后的结果仍然是原链表,所以如果遇到这种情况,我们就可以直接返回这个链表的头指针。除去这种特殊情况,我们来到了至少有两个元素的链表的处理,首先我们需要有两个指针pRev和pCur,令pCur指向头结点,pRev指向pCur(头结点)之原创 2017-07-15 10:45:44 · 3989 阅读 · 2 评论 -
atexit函数和进程终止方式
atexit函数:按照ISO C的规定,一个进程可以登记多达32个函数,通常这32个函数被称为终止处理程序,并调用atexit函数来登记这些函数。用 法: int atexit( void ( __cdecl *func )( void ) );头文件: #include功 能: 注册终止函数(即main函数执行结束后调用的函数)返回值: 成功返回0,失败返回非0值此处原创 2017-03-02 19:10:17 · 558 阅读 · 0 评论 -
日期类
class Date //日期类{public: Date(int year = 2017, int month = 1, int day = 1) //构造函数 :_year(year) ,_month(month) ,_day(day) { if( !(_year>0 && (_month>0 && month0 && _day<= GetDaysInMonth(_原创 2017-02-22 00:12:27 · 244 阅读 · 0 评论 -
大数运算之加法
大数运算就是很大的数字在进行运算,这个很大的数是int,long int和long long int都无法表示的(超出范围)。所以我们可以把这个大数存放在一个字符数组中,一个一个元素进行操作。大数加法可以定义两个字符数组num1,num2存放大数,之后将数组翻转,使num1[0]和num2[0]存放两个大数的最低位,从最低位开始一位一位相加,将结果保存到num1中,打印出num1就是大数相原创 2017-03-30 20:32:27 · 470 阅读 · 0 评论 -
AVL树旋转总结
原创 2017-06-07 01:20:38 · 247 阅读 · 0 评论 -
守护进程(精灵进程)
守护进程(daemon): 守护进程也叫精灵进程,是运行在后台的一种进程。它独立于控制终端,本身是一种孤儿进程,并且一般的守护进程都已d结尾,例如sshd。后台进程一般具有的性质是无输入输出,持久的运行着。如何创建守护进程?创建守护进程主要分六个步骤:1、调用umask将文件模式创建屏蔽字设置为0(即新文件权限为6 6 6);2、调用fork函数创建一个子进程,然后让父原创 2017-06-06 22:50:33 · 687 阅读 · 0 评论 -
select服务器
select函数只负责等 其中第一个参数是所有文件描述符数值最大值加一,剩下的4个参数,既是输入性参数,又是输出型参数,输入时和输出时含义完全不同 select 调用时所有参数必须重新设置 ,以下是select服务器只有读功能下的代码:原创 2017-06-30 15:38:56 · 241 阅读 · 0 评论 -
ARP脚本
1、什么是ARPARP(Address Resolution Protocol)即地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。2、ARP的功能在通过原创 2017-06-20 17:53:01 · 335 阅读 · 0 评论 -
合并两个有序链表
给出两个有序链表,合并成一个链表之后依然有序,这里给了两种方法,分别是非递归和递归,代码如下:Node* MergeList_Nor(Node* pHead1, Node* pHead2) //合并单链表(非递归){ if(pHead1 == NULL) return pHead2; if(pHead2 == NULL) return pHead1; Node* pHead =原创 2017-07-14 16:28:13 · 365 阅读 · 0 评论 -
合并两个有序的单链表
题目:合并两个递增的单链表,使合并后的新链表中的节点依然是按照递增排序的。链表结点定义如下:struct ListNode{ int val; ListNode next;};分析:我们从链表头结点开始分析,如果链表1头结点的值小于链表2头结点的值,那么链表1的头结点就是合并后新链表的头结点。 我们继续合并两个链表中剩余的结点,依旧是比较两个链表头结点的值,找原创 2017-08-22 23:29:09 · 609 阅读 · 0 评论