青春不谢的专栏

一个大学毕业才开始认真学习技术的人,期待自己也能变成别人眼中的牛人

源码分析redis的有序集合,学习skiplist跳跃表数据结构

最近在看redis源码,看到跳跃表的插入操作时感觉很头大,网上各种文章都只是在进行一个原理性的分析,唯独这篇文章一行一行代码地讲解,非常仔细和透彻。希望能帮助正在阅读redis源码的你!文章地址源码分析redis的有序集合,学习skiplist跳跃表数据结构

2016-05-03 16:51:33

阅读数 469

评论数 0

第7章 图

leetcode刷了一大半,数组,链表,树,队列和栈的题目已经做了好多,感觉比较扎实了。突然发现后面好多关于图算法的问题,没办法,又继续开始学习“图”这种数据结构。折腾了一天,把图的创建,深度优先级遍历(DFS)和广度优先级遍历(BFS)都用c++写出来了,算法参照了《算法导论》和《数据结构和算法...

2016-03-28 22:32:00

阅读数 398

评论数 0

用C++的string::size()和string::length()返回值做比较

楼主今天在自己实现kmp算法的c++代码时,发现了一个问题。我先把代码贴上来。//kmp search #include <iostream> #include <vector> using namespace std;vector<int> GetNext(s...

2016-03-16 14:17:59

阅读数 1552

评论数 1

LeetCode: 9. Palindrome Number

求一个整数是否是回文数。 形如121, 73637等等之类的数都是回文数。要求空间复杂度为O(1),这就让很多想转换为字符串再去判断的同学止步了;有的同学可能想把该整数倒转之后再去和原数比较是否相等,但是倒转后的数可能超过有符号整数范围,比如2147483647,倒转之后是7463847412,...

2016-02-24 15:04:21

阅读数 535

评论数 0

华为经典面试题---大数乘法的c++实现

32位机器上的最大有符号数为2147483647,最大无符号数是4294967295。这对于实际的计算显然是不够的,于是就产生了大数乘法的需求。其思路不算难,按照我们平时计算两个数的乘积的流程就行了。如果你使用的是c语言等不能动态扩展数组的语言,有一个需要考虑的问题是:两数相乘后的位数为多少?这需...

2016-02-24 10:44:52

阅读数 3350

评论数 0

Trie树的c++实现

关于Trie树的理论的东西,各位大神都已经说得很多了。参见这里是Trie树的简单介绍或者这里是它和其他一些树结构的使用场景。 Trie树又称“字典树”或“前缀树”,常见于小规模地统计词频,典型的用空间换时间。下面是我的一种c++实现,记录一下。 trie.h头文件#ifndef _TRIE_S...

2016-02-18 19:56:09

阅读数 681

评论数 0

LeetCode: 113. Path Sum II

这道题折磨了我好长时间,终于通过了所有test。语言c++,时间16ms。成就感能让我继续努力,所以记录一下。题目在这里Path Sum II,题目的意思是定义从二叉树的根结点到叶子结点为一条路径,将路径上所有结点的值加起来是该路径的和(path sum),现在给定一个整数,求出所有路径和等于该数...

2016-02-17 21:44:35

阅读数 649

评论数 0

次优二叉树 --- 折半查找在元素不等概情况下的改进

1、次优查找树是折半查找的一种一般形式,其理论基础是“被查找的各元素是不等概的”,而折半查找就是等概的,我们在使用中默认了这一性质。 比如,对于有序数组 int a = {1,2,3,4,5}; 用折半查找时,应该现比较最中间的3,如果如果待查整数等于3,查找结束。如果小于3,就继续在左边的...

2016-02-05 13:55:37

阅读数 1490

评论数 0

求二叉树的每个结点的子孙数量

《数据结构》严蔚敏版习题6.55 为二叉链表的结点增加DescNum域,表示该结点的子孙数量。编写一个算法,求二叉树的每个结点的子孙数目并存入其DescNum域。 思路: 方案1,利用递归,从根节点开始对每个结点都调用一次函数来求每个节点的子孙数量 很明显递归调用肯定很慢,因为要不断地压栈弹...

2016-01-26 17:42:35

阅读数 2893

评论数 1

求任意一颗二叉树的繁茂度

在《数据结构》严蔚敏版上的习题看到这个问题。 繁茂度的定义:各层节点数的最大值与树的高度的乘积 树的深度好求,递归调用就行了。关键在于如何求出各层的最大节点树?下面是我的一种实现方法: bitree.h#include <iostream> #include <cstdli...

2016-01-23 18:42:37

阅读数 1914

评论数 1

赫夫曼树的创建

今天在看《数据结构》(严蔚敏版),第6章第6节,讲到创建赫夫曼树的时候,给出的算法没有实现Select()函数,即选出数组中最小的两个权值的节点。于是我自己用c++实现了一个版本,考虑到算法的效率问题,我选择了创建一个小顶堆,每次从堆顶提取出最小的权值节点,这样比暴力for循环求最小权值节点的效率...

2016-01-13 21:53:41

阅读数 848

评论数 0

基于python的密码管理工具

如何记住各种各样的账户名和密码?这是一个头疼的问题。 现在各种社区,商业网站,客户端app,全都使用 用户名+密码 或 邮箱+密码的登陆方式。当你使用了越来越多的服务,就意味着你要管理越来越多的账户和密码,怎么能把他们都记住呢?因为你也并不是每个网站都经常上,有时候需要了才发现用户名什么的根本就...

2016-01-05 22:56:51

阅读数 1647

评论数 0

C++编程思想学习笔记---第15章 多态性和虚函数

多态性(polymorphis)提供了接口与具体实现之间的另一层隔离,从而将”what”与”how”分离开来。多态性改善了代码的组织性和可读性,同时也使创建的程序具有可扩展性。 15.1 C++程序员的演变c程序员可以用三步演变为C++程序员 简单地把C++作为一个更好的C:更强的类型检查等 进入...

2015-12-30 18:23:35

阅读数 492

评论数 0

C++编程思想学习笔记---第14章 继承和组合

继承是面向对象程序设计的基石 14.1 组合语法下面一段代码把类型X的一个对象作为公共对象嵌入到一个新类内部,实现了组合的语法。//: C14: useful.h //A class to reuse #ifndef USEFUL_H #define USEFUL_H class X{ i...

2015-12-29 22:55:48

阅读数 447

评论数 0

第6章 树和二叉树 要点提炼

6.2 二叉树6.2.1 二叉树的定义二叉树是一种特殊的树型结构,它的特点是每个结点至多只有两棵子树,并且二叉树的子树有左右之分,其次序不能任意颠倒6.2.2 二叉树的性质性质1——在二叉树的第i层上至多有2i−12^{i-1}个结点 性质2——深度为k的二叉树至多有2k−12^{k}-1个结...

2015-12-24 15:00:40

阅读数 482

评论数 0

C++编程思想学习笔记---第13章 动态创建对象

一个空中交通指挥系统需要处理多少架飞机?一个网络中将会有多少个节点?为了解决这个普通的问题,我们需要在运行时可以创建和销毁对象是最基本的要求。当然C早就提供了动态内存分配 函数malloc()和free(),它们可以从堆中分配存储单元。 然而这些函数将不能很好地运行,因为构造函数不允许我们向他传...

2015-11-08 17:57:00

阅读数 524

评论数 0

C++编程思想学习笔记---第12章 运算符重载

C++编程思想学习笔记—第12章 运算符重载 运算符重载只是一种语法上的方便,只是另一种形式的函数调用。 应当说明,运算符重载不应该被滥用,只有在能使涉及类的代码更易写,特别是更易读时,才有理由重载运算符 12.1 运算符重载的语法:#include <iostream> u...

2015-09-24 22:41:03

阅读数 464

评论数 0

C++编程思想学习笔记----第11章 引用和拷贝构造函数

11.1 C++中的指针 c和c++指针的最重要区别在于c++是一种类型要求更强的语言。在c中,void* 类型的指针可以随意地指向其他类型的指针,而c++中必须显示地使用类型转换通知编译器和读者,这算是它比较严谨的地方。 11.2 C++中的引用 #include using namesp...

2015-09-22 22:51:22

阅读数 421

评论数 0

循环缓冲区C++的一种实现

之前去腾讯面试的时候被问到的一道题目:实现一个循环缓冲区(不带互斥锁)。仔细一想,其实和循环队列的思想一模一样,还是怪自己数据结构没学好阿(其实我是学通信的,所以最近在恶补)。还是先上代码 头文件如下,CircleBuffer.h #ifndef _CIRCLE_BUFFER_H_ #de...

2015-09-09 23:17:03

阅读数 1594

评论数 0

N皇后问题的一般解法--回溯法

先上代码 #include #include #include #include using namespace std; vector board; void ShowQueen(void) { for(unsigned int i = 0; i < board.size(...

2015-09-07 19:31:10

阅读数 1025

评论数 0

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