自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 map,set,multimap,multiset的异同

map的特性是,所有元素都会依据元素的键值自动排序,map的所有元素都是键值对,同时有实值value和键值key。键值对的第一元素被视为键值,第二元素视为实值,map不允许两个元素有相同的实值注意:不可以通过map的迭代器改变map的元素值,因为set的元素值就是键值,关系到set的排列规则,如果任意改变set的元素值,会严重弄破坏set组织。

2017-05-30 09:00:21 1669

原创 复杂链表的复制

(1)根据原始链表的每个结点N创建对应的N,并且把N链接在N的后面。 (2)设置复制出来的节点的m_pSibling (3)把长链表拆分成两个链表#include <iostream>

2017-05-27 17:26:03 199

原创 纸牌游戏--小猫钓鱼

“小猫钓鱼”游戏规则: 将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手上的第一张扑克牌放在桌子上,然后小哈也拿出手上的第一张扑克牌,放在小哼刚打出的牌上面,就这样两人交替出牌。出牌时,如果某人打出的牌与桌上的牌的牌面相同,即可将两张相同的牌及其中间所加的牌全部取走,并依次放到自己手中牌的末尾,当任意一人手中的牌全部出完时,游戏结束,对手获胜。

2017-05-27 12:38:26 13949

原创 二叉搜索树之红黑树

1、 每个结点的颜色只能是红色或黑色。2、 根结点是黑色的。3、每个叶子结点都带有两个空的黑色结点(被称为黑哨兵),如果一个结点n的只有一个左孩子,那么n的右孩子是一个黑哨兵;如果结点n只有一个右孩子,那么n的左孩子是一个黑哨兵。4、 如果一个结点是红的,则它的两个儿子都是黑的。也就是说在一条路径上不能出现相邻的两个红色结点。5、对于每个结点来说,从该结点到其子孙叶结点的所有路径上包含相同数目的黑结点

2017-05-25 10:56:44 383

原创 AVL的插入,删除操作

在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树可以是空树,也可以是具有以下性质的树: (1):他的左右子树都是AVL树 (2):左子树和右子树高度之差(平衡因子)的绝对值不超过1特点:

2017-05-23 07:27:41 862

原创 荷兰国旗

题目描述:现有n个红白蓝三种不同颜色的小球,乱序排在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球白球蓝球。这个问题之所以叫荷兰国旗,是因为将红白蓝三色小球弄成条状物,并有序的排列后正好组成荷兰的国旗(图中球上标数字0的表示红球,1表示白球,2表示蓝球)解法:需要三个指针,一个前指针begin,一个中指针current,一个后指针end,current指针

2017-05-20 23:31:51 491

原创 奇偶数排序

题目描述:给定一个整数数组,请调整数组的顺序,使得所有奇数位于数组前半部分,所有偶数位于数组后半部分, 要求时间复杂度为O(n).分析与解法: 最容易想到的办法是从头到尾扫描这个数组,每遇到一个偶数,就把他单独取出来,然后把该偶数后面的所有数往前移动一位,最后把该偶数放入数组的最末尾。因为每遇到一个偶数,需要移动O(N)个数,所以时间复杂故为O(N*N),不符合题目要求。

2017-05-19 22:46:38 5485

原创 最大连续子数组和

题目描述:给定一个数组,数组里可能有正数,负数,0,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个一个和。求所有子数组和的最大值。例如,如果输入数组为,和的最大子数组为{1,-2,3,10,-4,7,2,-5},那么输出为该子数组的和18解法一:蛮力枚举法(时间复杂度:O(N*N*N))用三个for循环三层遍历,求出数组中每一个子数组的和,最终求出这些子数组和中最大的一个值。

2017-05-18 19:57:27 465

原创 二叉搜索树查找,插入,删除

二叉排序树的查找过程通常采取二叉链表作为二叉排序树的存储结构。中序遍历二叉排序树可得到一个关键字的有序序列,一个无序列可以通过构造一棵二叉排序树变成一个有序序列,构造树的过程即为对无序列进行排序的过程。每次插入的新的结点都是二叉排序树上新的叶子结点,在进行插入操作时,不必移动其它结点,只需改动某个结点的指针,由空变为非空即可。搜索,插入,删除的复杂度等于树高,O(log(n)).

2017-05-18 14:45:49 460

原创 二叉树面试题汇总

二叉树节点定义如下:struct BinaryTreeNode{ BinaryTreeNode(const T& data) : _data(data) , _pLeft(NULL) , _pRight(NULL) {} T _data; BinaryTreeNode<T>* _pLeft; // 左孩子

2017-05-12 22:49:02 334

原创 优先级队列

模板函数实现大小堆:#include <vector>#include <iostream>using namespace std;#include <assert.h>template<class T>struct Less{ bool operator()(const T& left, const T& right)//仿函数 { }

2017-05-11 13:07:22 204

原创 寻找和为定值的数

寻找和为定值的两个数://寻找和为定值的两个数#include <iostream>using namespace std;#include <list>排序夹逼 时间复杂度为O(nlogn+n) = O(nlogn),空间复杂度:O(1)void TwoSum(int a[], unsigned int length, int sum){}

2017-05-11 07:28:39 574

原创 寻找最小的K个数

解法一:排序法://解法一:全部排序//时间复杂度:O(n*n);#include <iostream>using namespace std;template<class T>void Sort(T array[], size_t size, int k){ for (int i = 0; i < size; i++) { for (int j =

2017-05-10 22:01:15 322

原创 字符串转整数

//字符串转整数int StrToInt(const char* str){ static const int MAX_INT = (int)((unsigned)~0 >> 1); static const int MIN_INT = -(int)((unsigned)~0 >> 1); unsigned int n = 0; //判断输入是否为空 if(

2017-05-08 20:27:39 241

原创 堆的一些简单操作

堆:n个元素序列{k1,k2,…,ki,…,kn},当且仅当满足下列关系时称之为堆:(ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4,…,n/2)若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。

2017-05-08 19:50:06 219

原创 线索化二叉树

对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树。这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。注意: 线索链表解决了无法直

2017-05-08 19:37:09 400

原创 最长回文子串

//解法一:中心扩展法int LongestPalindrome(const char* s, int n){ if(s == NULL || n < 1) return 0; int max = 0; int c = 0; //i为回文中心位置 for(int i=0; i<n; ++i) { //回文长度为奇数

2017-05-08 13:15:25 299

原创 二叉树的完整操作

#include <iostream>using namespace std;#include <queue>#include <stack>#include <list>template<class T>struct BinaryTreeNode{ BinaryTreeNode(const T& data) : _data(data) , _pL

2017-05-07 13:45:23 331

原创 数据结构基础--单链表

(1)单链表的建立、测长、打印(2)单链表删除节点(3)单链表的插入(4)单链表的排序(5)单链表的逆置

2017-05-03 22:49:06 2200

转载 线程安全与可重入函数

可重入函数与线程安全的区别与联系:1、线程安全是在多线程情况下引发的,而可重入函数可以在只有一个线程的情况下发生。2、线程安全不一定是可重入的,而可重入函数则一定是线程安全的。3、如果一个函数有全局变量,则这个函数既不是线程安全也不是可重入的。4、如果一个函数当中的数据全身自身栈空间的,则这个函数即使线程安全也是可重入的。

2017-05-01 17:27:01 420

原创 解密QQ号--队列

小明新学期有了新同桌,想和新同桌认识一下,就询问新同桌的QQ号,新同桌平时喜欢玩解密游戏,就给新同桌一串加密的数字,解密规则如下:首先将第一个数删除,紧接着将第二个数放到这串数的末尾,再将第三个数删除,将第四个数放到这串数的末尾,再将第五个数删除……直到剩下最后一个数,将最后一个数删除,按照刚才顺序,把删除的数连在一起就是正确的QQ号。 这串加密的数字是“1752251268”

2017-05-01 16:05:35 794

原创 SIG_CHLD信号

SIGCHLD,在一个进程终止或者停止时,将SIGCHLD信号发送给其父进程,按系统默认将忽略此信号,如果父进程希望被告知其子系统的这种状态,则应捕捉此信号。(17)SIGCHLD属于unix以及类unix系统的一种信号 产生原因 siginfo_t代码值 1,子进程已终止 CLD_EXITED 2,子进程异常终止(无core) CLD_KILLED 3,子进程异常终止(有core) CLD

2017-05-01 12:56:49 2870

原创 linux之信号捕捉

signal函数此函数在上一篇函数有介绍,可以参考上一篇博客 http://blog.csdn.net/qq_36221862/article/details/70171361 sigaction函数修改信号处理动作(通常在Linux用其来注册一个信号的捕捉函数)#include

2017-05-01 11:07:46 435

空空如也

空空如也

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

TA关注的人

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