红黑树(二)之 C语言的实现
摘要:概要红黑树在日常的使用中比较常用,例如Java的TreeMap和TreeSet,C++的STL,以及Linux内核中都有用到。之前写过一篇文章专门介绍红黑树的理论知识,本文将给出红黑数的C语言的实现代码,后序章节再分别给出C++和Java版本的实现。还是那句话,三种实现原理相同,择其一了解即可;若文章有错误或不足的地方,望不吝指出!目录1. 红黑树的介绍2. 红黑树的C实现(代码说明)3. 红黑树的C实现(完整源码)4. 红黑树的C测试程序转载请注明出处:http://www.cnblogs.com/skywang12345/p/3624177.html更多内容:数据结构与算法系列 目录(01
阅读全文
伸展树(三)之 Java的实现
摘要:概要前面分别通过C和C++实现了伸展树,本章给出伸展树的Java版本。基本算法和原理都与前两章一样。1.伸展树的介绍2.伸展树的Java实现(完整源码)3.伸展树的Java测试程序转载请注明出处:http://www.cnblogs.com/skywang12345/p/3604286.html更多内容:数据结构与算法系列 目录(01)伸展树(一)之 图文解析 和 C语言的实现(02)伸展树(二)之 C++的实现(03)伸展树(三)之 Java的实现伸展树的介绍伸展树(Splay Tree)是特殊的二叉查找树。它的特殊是指,它除了本身是棵二叉查找树之外,它还具备一个特点: 当某个节点被访问时,
阅读全文
伸展树(二)之 C++的实现
摘要:概要上一章介绍了伸展树的基本概念,并通过C语言实现了伸展树。本章是伸展树的C++实现,后续再给出Java版本。还是那句老话,它们的原理都一样,择其一了解即可。目录1.伸展树的介绍2.伸展树的C++实现(完整源码)3.伸展树的C++测试程序转载请注明出处:http://www.cnblogs.com/skywang12345/p/3604258.html更多内容:数据结构与算法系列 目录(01)伸展树(一)之 图文解析 和 C语言的实现(02)伸展树(二)之 C++的实现(03)伸展树(三)之 Java的实现伸展树的介绍伸展树(Splay Tree)是特殊的二叉查找树。它的特殊是指,它除了本身是
阅读全文
伸展树(一)之 图文解析 和 C语言的实现
摘要:概要本章介绍伸展树。它和"二叉查找树"和"AVL树"一样,都是特殊的二叉树。在了解了"二叉查找树"和"AVL树"之后,学习伸展树是一件相当容易的事情。和以往一样,本文会先对伸展树的理论知识进行简单介绍,然后给出C语言的实现。后序再分别给出C++和Java版本的实现;这3种实现方式的原理都一样,选择其中之一进行了解即可。若文章有错误或不足的地方,希望您能不吝指出! 目录1.伸展树的介绍2.伸展树的C实现3.伸展树的C测试程序转载请注明出处:http://www.cnblogs.com/skywang12345/p/3
阅读全文
AVL树(三)之 Java的实现
摘要:概要前面分别介绍了AVL树"C语言版本"和"C++版本",本章介绍AVL树的Java实现版本,它的算法与C语言和C++版本一样。内容包括:1.AVL树的介绍2.AVL树的Java实现3.AVL树的Java测试程序转载请注明出处:http://www.cnblogs.com/skywang12345/p/3577479.html更多内容:数据结构与算法系列 目录(01)AVL树(一)之 图文解析 和 C语言的实现(02)AVL树(二)之 C++的实现(03)AVL树(三)之 Java的实现AVL树的介绍AVL树是高度平衡的而二叉树。它的特点是:AVL树中任
阅读全文
AVL树(二)之 C++的实现
摘要:概要上一章通过C语言实现了AVL树,本章将介绍AVL树的C++版本,算法与C语言版本的一样。目录1.AVL树的介绍2.AVL树的C++实现3.AVL树的C++测试程序转载请注明出处:http://www.cnblogs.com/skywang12345/p/3577360.html更多内容:数据结构与算法系列 目录(01)AVL树(一)之 图文解析 和 C语言的实现(02)AVL树(二)之 C++的实现(03)AVL树(三)之 Java的实现AVL树的介绍AVL树是高度平衡的而二叉树。它的特点是:AVL树中任何节点的两个子树的高度最大差别为1。上面的两张图片,左边的是AVL树,它的任何节点的两
阅读全文
AVL树(一)之 图文解析 和 C语言的实现
摘要:概要本章介绍AVL树。和前面介绍"二叉查找树"的流程一样,本章先对AVL树的理论知识进行简单介绍,然后给出C语言的实现。本篇实现的二叉查找树是C语言版的,后面章节再分别给出C++和Java版本的实现。建议:若您对"二叉查找树"不熟悉,建议先学完"二叉查找树"再来学习AVL树。目录1.AVL树的介绍2.AVL树的C实现3.AVL树的C实现(完整源码)4.AVL树的C测试程序转载请注明出处:http://www.cnblogs.com/skywang12345/p/3576969.html更多内容:数据结构与算法系列 目录(01)AVL树
阅读全文
二叉查找树(三)之 Java的实现
摘要:概要在前面分别介绍了"二叉查找树的相关理论知识,然后给出了二叉查找树的C和C++实现版本"。这一章写一写二叉查找树的Java实现版本。目录1.二叉树查找树2.二叉查找树的Java实现3.二叉查找树的Java测试程序转载请注明出处:http://www.cnblogs.com/skywang12345/p/3576452.html更多内容:数据结构与算法系列 目录(01)二叉查找树(一)之 图文解析 和 C语言的实现(02)二叉查找树(二)之 C++的实现(03)二叉查找树(三)之 Java的实现二叉查找树简介二叉查找树(Binary Search Tree),又被称为二叉搜
阅读全文
二叉查找树(二)之 C++的实现
摘要:概要上一章介绍了"二叉查找树的相关理论知识,并通过C语言实现了二叉查找树"。这一章给出二叉查找树的C++版本。这里不再对树的相关概念进行介绍,若遇到不明白的概念,可以在上一章查找。目录1.二叉树查找树2.二叉查找树的C++实现3.二叉查找树的C++实现(完整源码)4.二叉查找树的C++测试程序转载请注明出处:http://www.cnblogs.com/skywang12345/p/3576373.html更多内容:数据结构与算法系列 目录(01)二叉查找树(一)之 图文解析 和 C语言的实现(02)二叉查找树(二)之 C++的实现(03)二叉查找树(三)之 Java的实现
阅读全文
二叉查找树(一)之 图文解析 和 C语言的实现
摘要:概要 本章先对二叉树的相关理论知识进行介绍,然后给出C语言的详细实现。关于二叉树的学习,需要说明的是:它并不难,不仅不难,而且它非常简单。初次接触树的时候,我也觉得它似乎很难;而之所产生这种感觉主要是由于二叉树有一大堆陌生的概念、性质等内容。而当我真正的实现了二叉树再回过头来看它的相关概念和性质的时候,觉得原来它是如此的简单!因此,建议在学习二叉树的时候:先对二叉树基本的概念、性质有个基本了解,遇到难懂的知识点,可以画图来帮助理解;在有个基本的概念之后,再亲自动手实现二叉查找树(这一点至关重要!);最后再回过头来总结一下二叉树的理论知识时,你会发现——它的确很简单!在代码实践中,我以"
阅读全文
队列的图文解析 和 对应3种语言的实现(C/C++/Java)
摘要:概要本章和介绍"栈"时的流程一样,先对队列进行介绍,然后分别给出队列的C、C++和Java三种语言的实现。内容包括:1.队列的介绍2.队列的C实现3.队列的C++实现4.队列的Java实现转载请注明出处:http://www.cnblogs.com/skywang12345/p/3562279.html更多内容:数据结构与算法系列 目录队列的介绍队列(Queue),是一种线性存储结构。它有以下几个特点:(01) 队列中数据是按照"先进先出(FIFO, First-In-First-Out)"方式进出队列的。(02) 队列只允许在"队首"
阅读全文
栈的图文解析 和 对应3种语言的实现(C/C++/Java)
摘要:概要本章会先对栈的原理进行介绍,然后分别通过C/C++/Java三种语言来演示栈的实现示例。注意:本文所说的栈是数据结构中的栈,而不是内存模型中栈。内容包括:1.栈的介绍2.栈的C实现3.栈的C++实现4.栈的Java实现转载请注明出处:http://www.cnblogs.com/skywang12345/p/3562239.html更多内容:数据结构与算法系列 目录栈的介绍栈(stack),是一种线性存储结构,它有以下几个特点:(01) 栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。(02) 向栈中添加/删除数据时,只能从栈顶
阅读全文
Linux内核中双向链表的经典实现
摘要:概要前面一章"介绍双向链表并给出了C/C++/Java三种实现",本章继续对双向链表进行探讨,介绍的内容是Linux内核中双向链表的经典实现和用法。其中,也会涉及到Linux内核中非常常用的两个经典宏定义offsetof和container_of。内容包括:1.Linux中的两个经典宏定义2.Linux中双向链表的经典实现转载请注明出处:http://www.cnblogs.com/skywang12345/p/3562146.html更多内容:数据结构与算法系列 目录Linux中的两个经典宏定义倘若你查看过Linux Kernel的源码,那么你对offsetof和cont
阅读全文
数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
摘要:概要线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列。本章先介绍线性表的几个基本组成部分:数组、单向链表、双向链表;随后给出双向链表的C、C++和Java三种语言的实现。内容包括:数组单向链表双向链表 1. C实现双链表 2. C++实现双链表 3. Java实现双链表转载请注明出处:http://www.cnblogs.com/skywang12345/p/3561803.html更多内容数据结构与算法系列 目录数组数组有上界和下界,数组的元素在上下界内是连续的。存储10,20,30,40,50的数组的示意图如下:数组的特点是:数据是连续的;随机访问速...
阅读全文
数据结构与算法系列 目录
摘要:最近抽空整理了"数据结构和算法"的相关文章。在整理过程中,对于每种数据结构和算法分别给出"C"、"C++"和"Java"这三种语言的实现;实现语言虽不同,但原理如出一辙。因此,读者在了解和学习的过程中,择其一即可!下面是整理数据数据和算法的目录表,对于每一种按照C/C++/Java进行了划分,方便查...
阅读全文
[转载] 散列表(Hash Table) 从理论到实用(下)
摘要:转载自: 白话算法(6) 散列表(Hash Table) 从理论到实用(下) 【澈丹,我想要个钻戒。】【小北,等等吧,等我再修行两年,你把我烧了,舍利子比钻戒值钱。】 ——自扯自蛋 无论开发一个程序还是谈一场恋爱,都差不多要经历这么4个阶段: 1)从零开始。没有束缚的轻松感。似乎拥有无限的可能性,也有相当多的不确定,兴奋、紧张和恐惧。 2)从无到有。无从下手的感觉。一步一坎,进展缓慢。走弯路,犯错,投入很多产出很少。目标和现实之间产生强大的张力。疑惑、挫败、焦急和不甘心。 3)渐入佳境。快速成长。创新,充实,满足。但是在...
阅读全文
[转载] 散列表(Hash Table)从理论到实用(中)
摘要:转载自:白话算法(6) 散列表(Hash Table)从理论到实用(中) 不用链接法,还有别的方法能处理碰撞吗?扪心自问,我不敢问这个问题。链接法如此的自然、直接,以至于我不敢相信还有别的(甚至是更好的)方法。推动科技进步的人,永远是那些敢于问出比外行更天真、更外行的问题,并且善于运用丰富的想象力找到新的可能性,而且有能力运用科学的方法实践的人。 如果可以不用链表,把节省下来的链表的指针所占用的空间用作空槽,就可以减少碰撞的机会,提高查找速度。使用开放寻址法处理碰撞 不用额外的链表,以及任何其它额外的数据结构,就只用一个数组,在发生碰撞的时候怎么办呢?答案只能是,再找另一个空着的槽啦!这...
阅读全文
[转载] 散列表(Hash Table)从理论到实用(上)
摘要:转载自:白话算法(6) 散列表(Hash Table)从理论到实用(上) 处理实际问题的一般数学方法是,首先提炼出问题的本质元素,然后把它看作一个比现实无限宽广的可能性系统,这个系统中的实质关系可以通过一般化的推理来论证理解,并可归纳成一般公式,而这个一般公式适用于任何特殊情况。 ——R.A. Fisher 在一个解决方案的复杂性之中,理论或者概念的部分通常只占有限的一小部分。理论无法做实际的工作——否则它也不成其为理论了。从理论到实用,需要经过一系列的发明。从实用到更加实用、更加通用,往往需要增加更多的复杂性。有...
阅读全文
红黑树(一)之 原理和算法详细介绍
摘要:概要目录1 红黑树的介绍2 红黑树的应用3 红黑树的时间复杂度和相关证明4 红黑树的基本操作(一) 左旋和右旋5 红黑树的基本操作(二) 添加6 红黑树的基本操作(三) 删除 作者:Sky Wang 于 2013-08-08 概述:R-B Tree,又称为“红黑树”。...
阅读全文