数据结构
文章平均质量分 73
wxx2222222
代码虐我千百遍,我待代码如初恋
展开
-
B树详解
B树的引入,定义,插入,代码原创 2017-06-04 13:58:24 · 837 阅读 · 0 评论 -
直接选择排序
直接选择排序 思路 1.在比较的元素中,找到最小的。 2.如果最小的是在0下标处,则无动作,否则,将最小的元素与0下标的元素交换位置。 3.按照1,2的步骤继续找到第二小的放在下标为1的地方…..一直循环到处理完整个数组。以此为例:数组a为:2,5,4,7,1,8,3,0,9,6 ///////////////////////////////////////选择排序/原创 2017-08-01 21:09:35 · 180 阅读 · 0 评论 -
堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义 :二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆原创 2017-08-03 23:44:37 · 214 阅读 · 0 评论 -
实现一个栈Stack,Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)
【思路】可以用两个栈来实现,s1为存储栈,s2为辅助栈。 入栈时,往s1里入栈,然后若s2为空,则s2也入栈,若s2不为空,则将s1里的栈顶与入栈的数字比较,若栈顶小,则s2不入栈,否则,s2,入栈。 出栈时,s1栈顶和s2栈顶比较,若相等,则s1和s2都出栈,否则,只是s1出栈。【代码如下】template class Sta原创 2017-07-19 23:20:47 · 357 阅读 · 0 评论 -
将二叉搜索树转换成一个排序的双向链表
【题目具体】 将二叉搜索树转换成一个排序的双向链表,要求不能创建任何新的结点,只能调整树中结点指针的指向,也就是left当prev,right当next。以如下的二叉树为例:要将此二叉树转化称为如下的双向链表:则步骤可以分以下:1.先找到最左边的结点0作为头结点。2.原创 2017-07-31 22:17:12 · 542 阅读 · 0 评论 -
用两个栈实现队列,用两个队列实现一个栈
bj原创 2017-07-18 14:16:37 · 262 阅读 · 0 评论 -
给出入栈顺序,判断元素出栈顺序的合法性
【思路】给出入栈顺序,判断出栈顺序的合法性。大致算法如下:以入栈顺序 1 2 3 4 5,出栈顺序2 1 3 5 4 为例1.先判断p1 p2不相等,1入栈,p1++然后p1和p2相等,p1++,p2++;2.判断栈顶元素1和p2相等,则出栈且p2++;3.p1的值和p2相等,都为三,则p1++,p2++;4.s为空,p2->5和p1->4不相等原创 2017-07-20 21:58:49 · 752 阅读 · 0 评论 -
由前序遍历和中序遍历重建二叉树
在刚开始见到这个题,只是觉得要用递归的方式来构造,但是实现很久实现不出来,后来多加了两个参数,直接定好了两个数组的遍历范围。【思路】以前序遍历: 1,2,3,4,5,6 【中左右】中序遍历:3,2,4,1,5,6 【左中右】1.由前序遍历可以得到根为1。2.在中序遍历中找到根1。3.建立结点1.4.找到后中序遍历1前面的都是根1的左子树的结点。5.中序遍历根原创 2017-07-29 22:18:29 · 780 阅读 · 0 评论 -
链表是否带环?环长?入口?时间复杂度?
【是否带环】 基本思路:定义两个指针从头结点开始,一个一次向后走一步,一次走两步,循环,若能够走到NULL,则不带环,若走到两个指针相等,则带环。代码如下:pair HasCircle(PNode phead)//判断是否带环,带环的话环的长度,入口。{ assert(phead); //时间复杂度是O(n) PNode pcur =原创 2017-07-17 09:45:45 · 362 阅读 · 0 评论 -
实现一个Add函数,让两个数相加,但是不能使用+、-、*、/等四则运算符。ps:也不能用++、--等等
第一次看到这个题,哇真是变态,不能用四则运算还要算出来加法,后来仔细想了想,可以用位运算,以下是剑指offer上的解决方法。 以5+14为例,5——0101,14——1110。要求得这个加法的结果,其实步骤有以下几步:1.只加数字,不进位,则可得结果 11——1011;(两个1加起来为10,但不算进位的话就为0)2.做进位,可以得到第3位时有进位,进位的值时100原创 2017-07-15 16:15:21 · 1510 阅读 · 0 评论 -
单例模式——c++实现线程安全的单例类
一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety.使用double-check来保证thread safety.但是如果处理大量数据时,该锁才成为严重的性能瓶颈。1、静态成员实例的懒汉模式:cla转载 2017-07-31 22:42:04 · 444 阅读 · 0 评论