
数据结构与算法
baofenny
这个作者很懒,什么都没留下…
展开
-
数据结构与算法之数组、链表、队列、栈
一、数组数组是一个存储元素的线性集合,它使用一块连续的内存空间保存数据,保存的数据的个数在分配内存的时候就是确定的。访问数组中第n个元素的时间花费是O(1) ,在数组中查找一个指定的元素则是O(N)。向数组中插入或删除元素时,最好的情况是在数组的末尾进行操作,时间复杂度是O(1),最坏情况是插入或者删除第一个元素,时间复杂度是O(N)。在数组的任意位置插入或删除元素时,...原创 2019-03-26 11:49:29 · 205 阅读 · 0 评论 -
数据结构与算法之PHP查找算法(哈希查找)
一、哈希查找的定义提起哈希,我第一印象就是PHP里的关联数组,它是由一组key/value的键值对组成的集合,应用了散列技术。哈希表的定义如下:哈希表(Hash table,也叫散列表),是根据关键码值(Key/value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M...原创 2019-04-02 14:07:23 · 315 阅读 · 0 评论 -
redis的五大数据类型实现原理
1、对象的类型与编码 Redis使用前面说的五大数据类型来表示键和值,每次在Redis数据库中创建一个键值对时,至少会创建两个对象,一个是键对象,一个是值对象,而Redis中的每个对象都是由 redisObject 结构来表示: 1 2 3 4 5 6 7 8 9 10 11 12 13...原创 2019-04-02 14:06:01 · 195 阅读 · 0 评论 -
数据结构与算法之PHP查找算法(二分查找)
二分查找又称折半查找,只对有序的数组有效。优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。一、算法思想首先,将表中间位置记录的值与查找值比较,如果两者相等,则查找成功;否则利用中间位置将表分成前、后两个子表,如果中间位置的值大于查找值,则进一步查找前一子表,否则进...原创 2019-03-26 11:56:10 · 271 阅读 · 0 评论 -
数据结构与算法之PHP查找算法(顺序查找)
对于查找数据来说,最简单的方法就是从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果,或者直到列表结尾也没有找到,这种方法称为顺序查找。一、基本写法顺序查找的实现很简单。只要从列表的第一个元素开始循环,然后逐个与要查找的数据进 行比较。如果匹配到了,则结束查找。如果到了列表的结尾也没有匹配到,那么这个数据 就不存在于这个列表中。// 顺序查找function s...原创 2019-03-26 11:55:43 · 379 阅读 · 0 评论 -
数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一、基本思想1)从图中的某个顶点V出发访问并记录;2)依次访问V的所有邻接顶点;3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到。4)重复第3步,直到图中所有顶点都被访问完为止。二、图的存储结构 示例图 图的邻接表...原创 2019-03-26 11:55:14 · 607 阅读 · 0 评论 -
数据结构与算法之PHP用邻接表、邻接矩阵实现图的深度优先遍历(DFS)
一、基本思想1)访问指定的起始顶点v;2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。二、图的存储结构 示例图 图的邻接表存储方式...原创 2019-03-26 11:54:41 · 934 阅读 · 0 评论 -
数据结构与算法之图的概念、存储结构及遍历方式
一、图的概念1、图:图(graph)由边(edge)的集合及顶点(vertex)的集合组成。通常记为:G=(V,E)。2、有向图、无向图图根据边有无方向分为有向图和无向图。 有向图 无向图 定义 图中的每条边都是有方向的。 图中的每条边都是无方向的。 ...原创 2019-03-26 11:54:05 · 695 阅读 · 0 评论 -
数据结构与算法之PHP实现二叉树的遍历
一、二叉树的遍历以某种特定顺序访问树中所有的节点称为树的遍历,遍历二叉树可分深度优先遍历和广度优先遍历。深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。可以细分为先序遍历、中序遍历、后序遍历。 深度优先遍历 先序遍历 中序遍历 后序遍历 解释 ...原创 2019-03-26 11:53:28 · 279 阅读 · 0 评论 -
数据结构与算法之二叉树的基本概念和类型
一、二叉树的基本概念二叉树:二叉树是每个节点最多有两个子树的树结构。根节点:一棵树最上面的节点称为根节点。父节点、子节点:如果一个节点下面连接多个节点,那么该节点称为父节点,它下面的节点称为子 节点。叶子节点:没有任何子节点的节点称为叶子节点。兄弟节点:具有相同父节点的节点互称为兄弟节点。节点度:节点拥有的子树数。上图中,13的度为2,46的度为1,28的度为0。树...原创 2019-03-26 11:52:00 · 242 阅读 · 0 评论 -
数据结构与算法之PHP实现队列、栈
一、队列1)队列(Queue)是一种先进先出(FIFO)的线性表,它只允许在表的前端进行删除操作,在表的后端进行插入操作,进行插入操作的端称为队尾,进行删除操作的端称为队头。即入队只能从队尾入,出队只能从队头出。2)队列一般拥有队首(front指针)和队尾(rear指针),当一个队列并未存入数据的时候,front和rear指针均指向队首。3)入队操作:rear后移,存入数据在rear指...原创 2019-03-26 11:51:16 · 190 阅读 · 0 评论 -
数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)
链表是由一组节点组成的集合。每个节点都使用一个对象的引用指向它的后继。指向另一个节点的引用叫做链。链表分为单链表、双链表、循环链表。一、单链表插入:链表中插入一个节点的效率很高。向链表中插入一个节点,需要修改它前面的节点(前驱),使其指向新加入的节点,而新加入的节点则指向原来前驱指向的节点(见下图)。由上图可知,B、C之间插入D,三者之间的关系为current为插入节点...原创 2019-03-26 11:50:41 · 266 阅读 · 0 评论 -
数据结构与算法之排序算法的时间复杂度、空间复杂度总结
算法复杂度分为时间复杂度和空间复杂度。时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。一、时间复杂度在介绍时间复杂度之前,先引入时间频度的概念:一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。每个算法花费的时间与...原创 2019-04-02 14:08:29 · 9963 阅读 · 0 评论