- 博客(9)
- 收藏
- 关注
原创 堆的相关操作
【堆的概念】如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki(Ki >= K2*i+1 且 Ki >= K2*i+2) i = 0,1,2…,则称这个堆为最小堆(或最大堆)。最小堆:任一结点的关键码均小于等于它的左右孩子的关键码,位于堆顶结点的关键码最小。最大堆:任一结点的
2017-04-18 16:37:03 552
原创 二叉搜索树
二叉搜索树 【概念】 二叉搜索树:又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树 1、若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 2、若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 3、它的左右子树也分别为二叉搜索树 例:此树就是一颗二叉搜索树。 【操作】—搜索:若根节点不为空 如果根节点的key=
2017-04-17 17:53:20 446
原创 浅析C++多态
一.什么是多态?C++是一种面向对象的语言,其三种基本特征为:封装,继承和多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!本片文章主要解释了三大特性中的多态。多态是面向对象程序设计的一个重要特征。利用多态性可以设计和实现一个易于扩展的系统。多态就是一个事物有多重状态,在C++程序
2017-04-17 16:33:25 755
转载 二叉树操作详解
本篇针对面试中常见的二叉树操作作个总结: (1)前序遍历,中序遍历,后序遍历; (2)层次遍历; (3)求树的节点数; (4)求树的叶子数; (5)求树的深度; (6)求二叉树第k层的节点个数; (7)判断两棵二叉树是否结构相同; (8)求二叉树的镜像; (9)求两个节点的最低公共祖先节点; (10)求任意两节点距离;
2017-04-13 17:52:28 747
原创 线程安全与可重入函数
线程安全(Thread-Safe):如果一个函数在同一时刻可以被多个线程安全地调用,就称该函数是线程安全的。线程不安全:当多个线程并发的调用一个函数。如果对全局数据或者静态数据在不加任何锁以及安全性的处理情况下,就会对多次修改数据的错误。比如我正在愿意个线程里处理一个全局变量的-1;正减完。结果还没有返回,就被另一个线程切出去了,而那个线程全局变量还是处于没有被处理的-1的值;本身我想让那个全
2017-04-13 17:42:39 671
原创 栈和队列相关面试题2
题目:(1)使用两个栈实现一个队列 (2)使用两个队列实现一个栈使用两个栈实现一个队列:我们知道对于栈,它是先进后出,而对于队列,它是先进先出。所以用两个栈实现一个队列最直观的思路就是:设这两个栈分别为s1,s2,始终把s1作为存储空间,把s2作为临时空间。那么 (1)入队时 把元素压入s1 (2)出
2017-04-07 17:31:24 680
原创 栈和队列相关面试题(1)
题目:实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)。方法一:使用一个栈。元素x入栈时,执行一次push(x),再push(min),min表示当前栈顶到栈底元素最小值;元素出栈时,执行两次pop() 。缺点:当第一个元素就是带插入所有元素中最小时,每次push都需要重复push相同元素,浪费了很多不必要的空间,操作冗余。
2017-04-07 15:24:59 675
原创 归并排序
归并排序基本思想是基于合并,将两个或两个以上有序表合并成一个新的有序表。合并两个子序列的过程称为两路归并。【算法思想】假设初始序列含有n个记录,首先将这n个记录看成n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2(n为奇数时,最后一个蓄力的长度为1)的有序子序列。在此基础上,在对长度为2的有序子序列进行两两归并,得到若干个长度为4的有序子序列。如此重复,直
2017-04-06 22:55:47 747
原创 简单选择排序,树形选择排序,堆排序详解
选择类排序的基本思想:每一趟在n-i+1个记录中选取关键字最小的记录作为有序序列中第i个记录,本篇博客主要介绍简单选择排序,并在其基础上给出了改进算法——树形选择排序(也称作锦标赛排序),堆排序。简单选择排序【算法思想】第一趟简单选择排序时,从第一个记录开始,通过n-1次关键字比较,从n个记录中选出关键字最小的记录,并和第一个记录交换。第二趟简单选择排序时,从第二个记录开始,通过n
2017-04-06 22:35:03 1789
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人