自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP和UDP区别、联系

TCPTCP和UDP的区别:1.TCP面向连接(如打电话前要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。2.TCP提供可靠的服务,也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠性。TCP要求系统资源较多,UDP较少,程序结构较简单。3.TCP面向字节流,实际上是TCP把数据看成一连串无结构的字

2017-09-22 18:11:52 616

转载 关于c++ new操作符的重载

原文地址:http://blog.csdn.net/bichenggui/article/details/4823978关于c++ new操作符的重载你知道c++ 的new操作符和operator new的区别么?也许你还会问,他们有区别吗? 当你写下面这样的代码时,string *pa = new string("memory managerment");你使用的是n

2017-09-22 08:00:54 1057

原创 剑指offer 3---二维数组的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都是按照从上到下递增的顺序排序。请完成函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。代码实现: bool Find(int target, vector > array) { if(array.size()==0){ return 0

2017-08-19 18:31:12 712 1

原创 剑指offer 38---数字在排序数组中出现的次数

题目:统计一个数字在排序数组中出现的次数,例如输入排序数组{1,2,3,3,3,3,4,5};和数字3,由于3在数组中出现了4次,因此输出4.思路:时间复杂度:                        O(logn)空间复杂度:                      O(1)int FindFirstK(int* arr,

2017-08-08 14:40:03 604

原创 剑指offer 40---数组中只出现一次的字符

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次,请写出程序找出这两个只出现了一次的数字,要求时间复杂度为O(n),空间复杂度为O(1)。

2017-08-08 10:57:23 711

原创 剑指offer 32---从1到n整数中1出现的次数

从1到n整数中1出现的次数

2017-08-06 09:25:59 253

原创 剑指offer 34---丑数

题目:求按从小到大的第1500个丑数。丑数:只包含因子2,3,5的数称为丑数。所谓一个数m是另一个数n的因子,是指n能被m整除。例:    解1:直观解法,从1开始计算,然后计数,直到第1500个丑数缺陷:每个整数都需要计算,效率非常低//判断是不是丑数bool IsUflyNum(int num){ if (num <= 0) { retu

2017-08-04 00:03:07 560 1

原创 求一个无序数组的中位数

求一个无序数组的中位数中位数是将数组排序之后,数组个数为奇数时,取中间的即为中位数;数组个数为偶数时,取中间两个的平均值即为中位数。思路一:要取得中位数,即给数组排序,使用任意排序算法均可,然后按数组下标取其中位数。PS:该方法很直观,此处不实现思路二:1.设数组元素为n个,且为奇数个时,取数组前(n+1)/2个元素建一个小堆2.遍历数组剩余元素,如果比堆顶

2017-08-03 17:33:07 9679 3

原创 归并排序

归并排序:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。步骤:1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列2.时间复杂度:           O(N*lgN)空间复杂度:           O(N)   需要额外空间性能:           稳定归并排序主要分

2017-08-03 12:50:15 453

原创 剑指offer 14---调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

2017-08-02 17:27:25 425

原创 剑指offer 9---斐波那契数列

题目:写一个函数,输入n,求斐波那契数列的第n项。解1:递归实现斐波那契数列#include #include using namespace std;int Fibonacci(int n) //递归实现斐波那契数列{ if (n <= 0) { return 0; } if (n == 1) { return 1; }

2017-08-01 23:38:43 748 5

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

C语言模式实现C++继承和多态描述:C实现一个struct A和struct B各包含一个int成员a和b,要求达到B继承了A的效果,也就是B里面包含一个A。并且能达到多态的效果,也就是一个A*p指向A调的是A的函数,指向B调用的是B的函数。C++中的继承、多态继承是面向对象复用的重要手段。通过继承定义一个类,继承是类型之间的关系建模,共享公有的东西,实现各自本质

2017-08-01 22:06:13 1094

原创 大、小端机器判断

大、小端判断大端模式:所谓的大端模式,是指数据的高字节保存在内存的低地址处,而数据的低字节保存在内存的高地址处。例子:0000430: e684 6c4e 0100 1800 53ef 0100 0100 00000000440: b484 6c4e 004e ed00 0000 0000 0100 0000在大端模式下,前32位应该这样读: e6 84 6

2017-07-27 21:32:28 757

转载 const volatile int i=10; i是什么属性?

const和volatile放在一起的意义在于:1.本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心;2.另一个程序段则完全有可能修改,因此编译器最好不要做太激进的优化。“const”含义是“请做为常量使用”,而并非“放心吧,那肯定是个常量”。“volatile”的含义是“请不要做没谱的优化,这个值可能变掉的”,而并非“你可以修改这

2017-07-27 15:43:02 2491

原创 判断一个值是否在一棵二叉树中。(注意多测几个值,看是否都能找到)

判断一个节点是否在一棵二叉树中。(注意多测几个节点,看是否都能找到)思路:分别和二叉树中的每个结点值相比,找到返回true,找不到返回false//判断一个节点是否在一棵二叉树中。(注意多测几个节点,看是否都能找到) bool _IsExit(Node* root,T key) { if (root == NULL) { return false; } if

2017-07-27 11:20:37 1348

原创 实现二叉树的前序/中序/后序递归、非递归遍历

实现二叉树的前序/中序/后序非递归、递归遍历

2017-07-26 22:44:11 1173

原创 销毁一颗二叉树-->Destroy(Node* root)

销毁一颗二叉树-->Destroy(Node* root)二叉树的很多问题都可用递归实现//销毁一颗二叉树-->Destroy(Node* root) void _Destory(Node* root) { if (root != NULL) { _Destory(root->_left); _Destory(root->_right); delete ro

2017-07-23 22:04:33 4756

原创 剑指offer 39---求二叉树的深度 && 输入一颗二叉树的根节点,判断该树是不是平衡二叉树

求二叉树的深度递归求解/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: int TreeDe

2017-07-23 21:46:16 781

原创 求二叉树叶子节点的个数 && 求第K层的节点个数

求二叉树叶子节点的个数思路:1.如果根节点为NULL时,则是空树,返回0;2.根节点不为空时,如果根节点的左右子树均为空,则该二叉树中只有一个节点,即返回1;3.叶子节点的个数=左子树叶子节点数+右子树叶子节点数;int _GetNodeyezi(Node* root) //叶子节点的个数 { if (root == NULL) { return 0;

2017-07-23 20:11:02 1394

原创 剑指offer 18---输入两棵二叉树A和B,判断B是不是A的子结构

输入两棵二叉树A和B,判断B是不是A的子结构思路:1.先在A中找和B的根节点相同的结点2.找到之后遍历对应位置的其他结点,直到B中结点遍历完,都相同时,则B是A的子树3.对应位置的结点不相同时,退出继续在A中寻找和B的根节点相同的结点,重复步骤,直到有任何一棵二叉树为空退出/*struct TreeNode { int val; struct Tr

2017-07-23 17:36:34 1816

原创 剑指offer 37---求两个链表的第一个公共结点

求两个链表的第一个公共结点思路:此处求解的是两个单链表,如果两个单向链表有公共的结点,那么这两个链表从某一结点开始,它们的_next都指向同一结点。由于是单链表的结点,每个结点只有一个_next,因此从第一个公共结点开始,之后它们所有的结点都是重合的,不可能再出现分叉。所以两个有公共结点而部分重合的链表,拓扑形状像一个Y,而不可能是Xstruct ListNode{

2017-07-22 21:45:39 672

原创 剑指offer 23----二叉树的前序、中序、后序、层序遍历

二叉树的前序、中序、后序、层序遍历#include #include #include using namespace std;templatestruct BinaryTreeNode //构建二叉树的节点,及左右子树的指针{ T _data; //值 BinaryTreeNode* _left; //左子树 BinaryTreeNode* _right

2017-07-21 14:20:21 621 4

原创 剑指offer 10----计算一个整数二进制位中1的个数

计算一个整数二进制位中1的个数。要求效率尽可能的高。且能正确求正数和负数的二进制中1的个数。int BitCount(int n){ int count = 0; while (n) { n = n&(n - 1); ++count; } return count;}int main(){ int n = 9; int tty = BitCount(n); c

2017-07-20 11:44:40 515

原创 二分查找

二分查找:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后

2017-07-20 10:24:42 374

原创 剑指offer 35---查找第一个只出现一次的字符

查找第一个只出现一次的字符//第一个只出现一次的字符 "abcdefghigkacdefg"char FirstRepete(char* str){ if (str == NULL) { return '\0'; } //利用哈希表解决 const int tablesize = 256; //一个字符占一个字节,所以有256种情况 unsigned int Ha

2017-07-19 18:22:18 714 4

原创 剑指offer 5---从尾到头打印单链表

从尾到头打印单链表PS:如果题设不要求不能改变链表结构时,可以使用单链表的逆置(之前已经写过),单链表的逆置改变了链表的方向,严格要求时不能这样写。解1:

2017-07-18 15:04:26 517 1

原创 删除一个无头单链表的非尾节点

删除一个无头单链表的非尾节点//删除一个无头单链表的非尾结点void DeleteNoHeadNode(ListNode* pos) //pos为要删除的结点{ assert(pos); if (pos->_next == NULL) { //pos为最后一个结点 delete pos; pos = NULL; } else { ListNode* posN

2017-07-18 10:52:14 662

原创 如何定义一个只能在堆(栈)上创建对象的类

如何定义一个只能在堆(栈)上创建对象的类1.只能在栈上创建对象的类只有使用new运算符,对象才会建立在堆上,因此,只要禁用new运算符就可以实现类对象只能建立在栈上class AA{public: AA() { cout << "AA()" << endl; } ~AA() { cout << "~AA()" << endl; }};int main()

2017-07-17 15:55:07 3164 1

转载 C++中友元详解

问题的提出  我们已知道类具备封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程式中的其他函数是无法访问私有成员的。非成员函数能够访问类中的公有成员,但是假如将数据成员都定义为公有的,这又破坏了隐藏的特性。另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程式的运行效率。  为了解决上述问题,提出一种

2017-07-17 13:57:52 219

转载 C++用new和不用new创建类对象区别

起初刚学C++时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用new的确会带来很多问题。当然这都是跟new的用法有关的。new创建类对象,使用完后需使用delete删除,跟申请内存类似。所以,new有时候又不太适合,比如在频繁调用场合,使用局部new类对象就不是个好选择,使用全局类对象或一个经过初始化的全局类指针似乎更加高

2017-07-17 13:47:50 506

原创 剑指offer 48---设计一个类不能被继承

设计一个类不能被继承在C++继承中,子类的构造函数会自动调用父类的构造,子类的析构会自动调用父类的析构。一个简单的例子:class AA{public: AA() { cout << "AA()" << endl; } ~AA() { cout << "~AA()" << endl; }};class BB:public AA{public: BB(

2017-07-17 13:27:51 621

原创 腾讯笔试题--到底输出几个 -

请问下面的程序一共输出多少个“-”?为什么?结果:输出为: 6PS:有缓冲区\n 和 刷新缓冲区结果一样 结果:解析:1.程序一开使,bash产生一个进程P1执行此程序,2.P1进入程序后,当i=0时,fork()产生一个子进程P2,同时它自己输出一个'-'.3.P2继承P1的诸如环境变量,PC等环境,

2017-07-16 20:18:11 1535 11

原创 剑指offer 15---判断链表是否带环?若带环求环的长度?若带环求环的入口点?

判断链表是否带环?若带环求环的长度?若带环求环的入口点?判断链表是否带环?//判断链表是否带环bool IsCircle(ListNode* pHead){ if (pHead == NULL || pHead->_next == NULL) { return false; } //快慢指针法 ListNode* fast = pHead; ListNode* sl

2017-07-15 18:34:06 743

原创 剑指offer 16---单链表的逆置

单链表的逆置非递归实现#include #include using namespace std;struct ListNode{ int _value; ListNode* _next; ListNode(const int& value) :_value(value) , _next(NULL) {}};//单链表的逆置 非递归实现ListNode

2017-07-14 22:53:20 667

原创 剑指offer 46---实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字

实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。//实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字。#include #include using namespace std;int Sum(int k) { return k >0 ? k + Sum(k - 1) : 0;}int main(){

2017-07-14 16:32:43 365

原创 剑指offer 47----实现一个Add函数,让两个数相加,但是不能使用+、-、*、/等四则运算符。ps:也不能用++、--

实现一个Add函数,让两个数相加,但是不能使用+、-、*、/等四则运算符。ps:也不能用++、--#include #include using namespace std;int Add(int& num1, int& num2){ if (num1 == 0) { return num2; } if (num2 == 0) { return num1; }

2017-07-14 15:44:15 1310 5

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

查找单链表的倒数第k个节点,要求只能遍历一次链表#include #include using namespace std;struct ListNode{ int _value; ListNode* _next; ListNode(const int& value) :_value(value) , _next(NULL) {}};//查找单链表的倒数第K个结

2017-07-14 14:30:44 810

原创 剑指offer 17---合并两个排序的链表

一.链表1:1 3 5 7 9    链表2:2 4 6 8 10      升序排列#include #include using namespace std;//合并两个有序链表,假设链表是升序排列//链表1:1,3,5,7,9 链表2:2,4,6,8,10struct ListNode{ int _value; ListNode* _next; ListNo

2017-07-13 15:56:34 447

原创 宏函数

define 在C语言中,有很多作用,除了一些基本的概念,定义常量以外,比较有意义的就是它所定义的宏函数一.两个数相加#define ADD(a,b) ((a)+(b))int main(){ int i = 6; int p = 17; int q = ADD(i, p); printf("ADD:%d\n", q); system("pause"); return

2017-07-09 22:21:17 593 6

原创 引用与指针比较

引用:        引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。 定义的格式为:        类型    &引用变量名=已经定义过的变量名;例如:         int  m;        int  &n=m;         //此处n为m的别名引用的特点:1.一个变量可以有多个别名2.引用必须初始化3.引用只能在初始化的时候引用

2017-07-09 17:47:49 614 1

空空如也

空空如也

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

TA关注的人

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