Data Structure And Algorithm
fireflylane
这个作者很懒,什么都没留下…
展开
-
线性表(二) 单链表应用——可利用空间表
常常会有频繁申请、释放内存的需求,比如在发送网络报文时,每次都要分配内存以存储报文,等报文发送完成后又需要删除报文。为了避免频繁的new/delete对系统带来的开销,需要实现一个通用的FreeList机制。使用者总是从free list中分配内存,如果存在没有使用的内存块就直接摘出来使用,如果没有的话再从系统中分配。使用完毕后并不去直接delete该内存块,而是交给FreeList保管。这里...原创 2018-09-30 21:23:23 · 1435 阅读 · 0 评论 -
内部排序算法要点总结
本文将对于插入排序、冒泡排序、选择排序、希尔排序、归并排序、快速排序、堆排序、分配排序和基数排序做归纳总结,通过一些题目来掌握各大内部排序算法的过程和特点,而不涉及具体的代码。1、当排序的序列存在多个具有相同关键码的记录时,经过排序后,如果这些记录的相对顺序仍然保持不变,则这个排序算法称为是稳定的。八种内部排序法哪些是稳定的,如果不稳定,如何修改使之稳定?插入排序、冒泡排序是稳定的。 ...原创 2018-11-25 12:02:58 · 1003 阅读 · 0 评论 -
图解快速排序
转自https://www.cnblogs.com/MOBIN/p/4681369.html图解快速排序快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现,也是作为程序员必须掌握的一种排序方法。思想 1.在待排序的元素任取一个元素作为基准(通常选第一个元素,但最的选择方法是从待排序元素中随机选取一个作为基准),称为基准元素; 2.将...转载 2018-11-14 22:52:33 · 195 阅读 · 0 评论 -
树
树的四种存储结构双亲表示法用两个等大小的数组存储。第一个存储结点的data,第二个存储每个结点父亲结点的标号(即父亲结点在第一个数组中的下标)注:这种表示法类似于并查集,每个结点只知父结点,不知子结点孩子表示法用邻接表存储。开一个存储元素为头结点的指针的一维数组,每个头结点后连一条单链表,链表结点存储元素为子结点在数组中的下标。注:这种表示法为图的邻接表存储方式,每个结点只知子结点,...原创 2018-11-02 20:13:42 · 155 阅读 · 0 评论 -
二叉检索树(BST)
使用无序表和有序表组织的数据,不是查找时间复杂度偏高,就是插入时间复杂度偏高,而接下来将要介绍的二叉检索树(BST)则能很好的解决以上问题。二叉检索树又称二叉查找树、二叉排序树。BST性质BST是满足下面所给出条件的二叉树:对于二叉检索树的任意一个结点,设其值为K,则该结点左子树中任意一个结点的值都小于K;该结点右子树中任意一个结点的值都大于或等于K。对于一组数,将这组数的两个...原创 2018-10-15 23:00:05 · 2193 阅读 · 0 评论 -
浅谈Trie树(字典树)
作者:xxy出处:http://www.cnblogs.com/TheRoadToTheGold/一、引入字典是干啥的?查找字的。字典树自然也是起查找作用的。查找的是啥?单词。看以下几个题:1、给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单词表中出现过。答:简单!map,短小精悍。好。下一个2、给出n个单词和m个询问,每次询问一个前缀,回答询问是...转载 2018-10-15 11:16:20 · 214 阅读 · 0 评论 -
二叉树
二叉树结点ADTtemplate <typename E> class BinNode{public: virtual ~BinNode() {} /* 返回元素的值 */ virtual E& element() = 0; virtual void setElement(const E&) = 0; /* 返回左右孩...原创 2018-10-12 08:55:09 · 418 阅读 · 0 评论 -
表达式树与前中后缀表达式
计算机科学中,除了栈以外,二叉树也是处理表达式的常用工具,为了处理表达式而遵循相应规则构造的树被称为表达式树。表达式树算数表达式是分层的递归结构,一个运算符作用于相应的运算对象,其运算对象又可以是任意复杂的表达式。树的递归结构正好用来表示这种表达式。下面只讨论二元表达式。 二元表达式可以很自然的联系到二叉树:以基本运算对象作为叶节点中的数据;以运算符作为非叶节点中的数据,其两棵子树是它的...原创 2018-10-11 21:09:03 · 26091 阅读 · 3 评论 -
线性表(四) 栈、队列
在介绍了线性表的两种形式:顺序表和链表后,我们接下来学习两种特殊的受限制的线性表:栈(LIFO线性表)和队列(FIFO线性表)。栈栈是限定仅在一端进行插入或删除操作的线性表。虽然这个限制减小了栈的灵活性,但是也使得栈更有效,更容易实现。栈还有一个名字,称为LIFO(后进先出)线性表,意味着栈存储和删除元素的顺序与元素到达的顺序相反。习惯上我们称栈的可访问元素为栈顶元素(top),元素插...原创 2018-10-03 21:15:02 · 1175 阅读 · 0 评论 -
算法思想(一) 递归
如果一个算法调用自己来完成它的部分工作,就称这个算法是递归的。这种方法要想取得成功,必须在原始问题规模更小的问题上调用自己。原创 2018-10-03 00:15:38 · 3001 阅读 · 0 评论 -
线性表(五) 字典
本文将描述用于一个简单数据库的接口——字典,并定义其ADT,实现在数据库中存储、查询和删除记录的功能。可以将本文实现的ADT作为一个基准,与用来实现字典的各种数据结构相比较。原创 2018-10-01 23:25:31 · 667 阅读 · 0 评论 -
线性表(三) 链表
链表是由一系列称为表的结点的对象组成的。它可以动态分配存储空间,解决了数组的静态分配存储空间的一些弊端。在一些应用中,常采用动态分配静态化的思想为链表分配存储空间,这种技术称为“存储池”。常见的链表类型有:单链表、双链表、循环链表,本文将对三者做详细介绍。原创 2018-10-01 01:08:51 · 339 阅读 · 0 评论 -
哈夫曼树及哈夫曼编码
哈夫曼树哈夫曼树,最优二叉树,带权路径长度(WPL)最短的树。它没有度为1的点,是一棵严格的二叉树(满二叉树)。何谓‘带权路径长度’了解哈夫曼树,我们首先要知道树的几个相关术语,并了解什么是WPL。路径:从树中一个结点到另一个结点之间的分支构成两个结点之间的路径路径长度:路径上的分支数目树的路径长度:从树根到每一个结点的路径长度之和树的带权路径长度:树中所有叶子结点的带权路径之和W...原创 2018-09-29 18:25:25 · 10738 阅读 · 1 评论 -
线性表(一) 线性表ADT+链表入门
线性表ADT中包含的关键设计是对当前位置(current position)的支持,当前位置是指线性表操作(如插入和删除)将会作用的位置。原创 2018-09-20 23:14:20 · 2780 阅读 · 0 评论 -
模板 Dijkstra+链式前向星+堆优化(非原创)
我们首先来看一下什么是前向星. 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了. 用len[i]来记录所有以i为起点的边在数组中的存储长度.用head[i]记录以i为边集在数组中的第一个存储位置. 那么对于下图:我...转载 2018-12-09 20:21:43 · 313 阅读 · 0 评论