数据结构
文章平均质量分 57
奔跑的小河
从博客中来,到博客中去。
展开
-
二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比
前言:BST、AVL、RBT、B-tree都是动态结构,查找时间基本都在O(longN)数量级上。下面做出详细对比。1. 二叉查找树 (Binary Search Tree)概念二叉查找树又称二叉搜索树,二叉排序树,特点如下: 1. 左子树上所有结点值均小于根结点 2. 右子树上所有结点值均大于根结点 3. 结点的左右子树本身又是一颗二叉查找树 4. 二叉查找树中序遍...原创 2015-10-12 20:43:16 · 25626 阅读 · 4 评论 -
数据结构——二叉树的链式存储操作集合
二叉树是一种非常重要的数据结构,它是很多算法的基础,下面给出了包含二叉树的所有基本操作:二叉树的数据结构二叉树的递归遍历二叉树的非递归遍历二叉树常用操作原创 2015-07-30 09:53:42 · 1993 阅读 · 0 评论 -
数据结构——单链表(链表操作算法集合)
这里整合了数据结构书中关于单链表的所有操作,另外附带常用的单链表操作,算是一个比较全的单链表操作集合吧。对于带头结点的单链表、循环单链表、双链表只给出基本操作,复杂的操作跟这里的单链表差不多。原创 2015-07-30 11:10:45 · 2768 阅读 · 0 评论 -
C++实现LRU(最久未使用)缓存算法
LRU缓存算法也叫LRU页面置换算法,是一种经典常用的页面置换算法,本文将用C++实现一个LRU算法。LRU算法实现并不难,但是要高效地实现却是有难度的,要想高效实现其中的插入、删除、查找,第一想法就是红黑树,但是红黑树也是一种折中的办法。插入、删除效率最高当属链表,查找效率当属hash。所以,这里我们就将链表和hash结合起来,利用空间换时间的思想,实现LRU算法。LRU具体概念就不列出了,本文的目的是进一步了解LRU算法和学习高效的编程方法。原创 2015-09-11 16:21:26 · 11911 阅读 · 5 评论 -
学习STL,实现一个单链表的迭代器
STL源码剖析中,空间配置器和迭代器属于比较晦涩难懂的两章,这里学习了STL迭代器后也尝试自己写一个迭代器,实现单链表的迭代器,实现不难,可以说是一个玩具而已,但是能够帮助我们理解STL迭代器的基本原理。1.节点Node和单链表的定义LinkList//声明templateclass ListIterator;templateclass LinkList;//链表节点temp原创 2015-09-10 10:38:00 · 2022 阅读 · 0 评论 -
数据结构——二叉树的层次遍历
二叉树的层次遍历说简单也简单,说难也难。下面是我读编程之美和研究数据结构结合大神的博客来实现的二叉树的层次遍历,这里只给出三种简单高效的解法。原创 2015-09-08 20:22:29 · 1740 阅读 · 0 评论 -
数据结构——树的简单操作集合
很多数据结构的书上讲解数据机构时都是采用伪代码实现,其实感觉蛮不直观的,所以对于所有的数据结构操作我都将其用C实现一遍。 树是学习二叉树的基础,也是后面理解B树,B+树的等树的基础,下面就给出树的几个简单操作,方便理解。原创 2015-07-30 10:05:08 · 1327 阅读 · 0 评论 -
数据结构——循环单链表
循环单链表相较单链表优点之一就是不需要每次都从开头处开始进行遍历。 待续。。。原创 2015-07-30 11:13:31 · 1261 阅读 · 0 评论 -
数据结构——双链表
双链表增加一个指向前驱结点的指针,使得链表可以向前,向后查找。但是操作略微复杂点。原创 2015-07-30 11:20:30 · 582 阅读 · 0 评论 -
KMP字符串匹配算法——用最容易理解的方式描述
看了数据结构书上对于快速模式匹配算法KMP的介绍,感觉云里雾里。本文根据自己理解,并查资料整理了一种非常清晰简单的字符串匹配算法,并给予实现,自诩原创吧。字符串匹配是我们经常要用到的一种算法,与普通的匹配算法相比KMP算法效率更高,时间复杂度为O(m+n)。原创 2015-07-18 21:00:01 · 1577 阅读 · 4 评论 -
数据结构——带头结点的单链表
带头结点的单链表能够简化单链表的插入,删除等操作。原创 2015-07-30 11:17:36 · 2075 阅读 · 0 评论 -
字符串匹配算法——Boyer-Moore算法
字符串匹配算法很多,Boyer-Moore算法也不算是效率最高的算法,它常用于各种文本编辑器的”查找”功能(Ctrl+F)。 比较经典的字符串模式匹配算法还有:Horspool算法、Sunday算法、KR算法、AC自动机等。不多说,进入主题。Boyer-Moore算法概率转载 2015-07-19 17:29:28 · 1040 阅读 · 0 评论 -
数据结构——图
图是一种较为复杂的非线性结构,数据结构和算法都比较复杂,对于我来说默写图的相关算法还是很有难度的。所以,我这里只描述图的常用数据结构,常用算法原理。数据结构邻接矩阵邻接矩阵的有向图和无向图数据结构相同,其中无向图的邻接矩阵是对称的所以可以采用三角矩阵进行压缩存储,其存储空间只需n(n+1)/2。而有向图则需要n*n。原创 2015-07-30 22:17:52 · 1322 阅读 · 1 评论 -
Linux中的经典双链表的实现
首先上一篇博客介绍了Linux下的两个经典宏,它可以根据结构体中的成员变量地址,计算出结构体地址。有了它,就可以实现可复用的高效双链表。这次我再Windows环境下给予的实现,看完觉得会受益匪浅。Linux中双向链表的使用思想它是将双向链表节点嵌套在其它的结构体中;在遍历链表的时候,根据双链表节点的指针获取"它所在结构体的指针",从而再获取数据。我举个例子来说明,可能比较容原创 2015-07-16 19:29:04 · 1361 阅读 · 2 评论 -
Linux下的两个经典宏定义
本文首先介绍Linux下的经典宏定义,感受极客的智慧,然后根据该经典定义为下篇博客作铺垫。offsetof宏定义:// 获得结构体(TYPE)的变量成员(MEMBER)在此结构体中的偏移量。#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)说明:获得结构体(TYPE)的变量成员(MEMBER)在此结原创 2015-07-16 17:25:20 · 1776 阅读 · 0 评论 -
一致性哈希(Consistent Hashing)原理和实现
前言:对于一致性哈希已经不是罕见概念,在此只是对原有理论概念的一个整理和用自己的理解讲述,希望对新手有些许帮助,利人利己足矣。1.概念一致哈希是一种特殊的哈希算法。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对 K/n 个关键字重新映射,其中 K是关键字的数量,n是槽位数量。然而在传统的哈希表中,添加或删除一个槽位的几乎需要对所有关键字进行重新映射。一致哈希将每个对象映射原创 2015-04-06 17:37:42 · 1567 阅读 · 1 评论 -
【算法】九大排序算法总结
九大排序算法这里我不采用数组来进行排序,而是采用更加符合应用的数据结构来排序。这是一种简单描述,更加详细的数据机构应该是下面这样(但是为了方便描述还是使用上面的简单结构):原创 2015-10-12 12:07:47 · 731 阅读 · 0 评论