数据结构-PHP 线段树的实现

2020-10-31
阅读 10 分钟
1.6k
线段树是基于区间的统计查询,线段树是一种 二叉搜索树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN),线段树是一颗 平衡二叉树。

4.2 数据结构(PHP实现) -- 二分搜索树的遍历(递归实现)

2020-10-30
阅读 6 分钟
1.4k
1. 遍历原则前序遍历:先遍历当前结点,再遍历当前结点的左儿子,最后遍历当前结点的右儿子中序遍历:先遍历当前结点的左儿子,再遍历当前结点,最后遍历当前结点的右儿子后续遍历:先遍历当前结点的左儿子,再遍历当前结点的右儿子,最后遍历当前结点2. 前序遍历示意图3. 中序遍历示意图4. 后序遍历示意图5. 二分搜索树...

4.1 数据结构(PHP实现) -- 二分搜索树的结点插入

2020-10-30
阅读 3 分钟
1k
1. 插入原则:第一个结点为根节点后续插入的结点值如果小于根节点,就成为根节点的左儿子后续插入的结点值如果大于根节点,就成为根节点的右儿子2. 示意图3. 二分搜索树的实现 {代码...} 4. demo {代码...}

数据结构-PHP 输出数组中出现频率最高的前 k 个

2020-10-30
阅读 14 分钟
1.6k
​这篇文章主要是通过一个问题实现过程,选择合适的数据结构,结合之前介绍过的 基于二分搜索树实现的映射(Map) 和 最小堆两种数据结构,可以将问题实现过程的时间复杂度降低。

数据结构-PHP 优先级队列(最大堆)的实现

2020-10-29
阅读 9 分钟
1.4k
对于 普通队列,数据元素是 First In First Out,而对于 优先队列 是出队顺序和入队顺序无关,和优先级相关,其特点是 动态的 选择优先级最高的出队。

平衡二叉搜索树【AVL树】

2020-10-28
阅读 2 分钟
1.5k
先了解下 “平衡因子”:平衡因子是某节点的左右子树的高度差。如下图,红字数字就是每个节点的平衡因子再次注意:节点下的红色数字表示的是 当前节点的平衡因子AVL树的特点:每个节点的平衡因子只可能是1、0、-1(绝对值<=1,如果超过1,称之为"失衡")每个节点的左右子树高度差不超过1搜索、添加、删除的时间复杂度是O(...

数据结构-PHP 映射(Map)实现

2020-10-27
阅读 9 分钟
4.7k
这篇文章主要介绍如何实现 映射(Map),映射是一个存储(键,值)数据对的数据结构(key-value),它的特点是根据键(key)去寻找值(value),下面主要介绍如何使用 链表 去实现 映射(Map)和使用 二分搜索树(Binary Search Tree) 去实现 映射(Map)。

设计模式之 OOA,OOD,OOP,OOPL

2020-10-26
阅读 4 分钟
8.4k
面向对象编程的英文缩写是 OOP,全称是 Object Oriented Programming。对应地,面向对象编程语言的英文缩写是 OOPL,全称是 Object Oriented Programming Language。

设计模式之 学习设计模式的意义

2020-10-26
阅读 1 分钟
1.3k
为什么要学习设计模式的三个理由:(一) 应对面试中的设计模式相关问题学习设计模式和算法一样,最功利、最直接的目的,可能就是应对面试了不管是前端工程师、后端工程师,还是全栈工程师,在求职面试中,设计模式问题是被问得频率比较高的一类问题。特别是大厂,经常会拿算法、设计模式之类的问题来考察候选人。常见的:

数据结构-PHP 二分搜索树的层序遍历(队列实现)

2020-10-26
阅读 8 分钟
1.5k
​前面文章介绍了二分搜索树的 前序遍历、中序遍历、后续遍历,这篇文章主要介绍一下如何使用 队列 实现二分搜索树的 层序遍历。1.队列1.1 队列的特点队列(Queue) 是一种线性结构。只能从一端 tail(队尾) 添加元素,从另外一端 front(队首) 取出元素。是一种 First In First Out(FIFO),即 先进先出 的结构。1.2 队列的...

数据结构-PHP 压栈遍历二分搜索树

2020-10-25
阅读 7 分钟
1.6k
前面写了一篇的文章,实现的方法是用的递归思想遍历,这篇文章主要介绍一下如何使用 压栈 的思想来遍历二分搜索树。1.栈为了更好的结合压栈的思想,下面先来介绍一下 栈 数据结构的知识:1.1 栈的特点栈是一种线性数据结构。栈只能从一端添加数据,也只能从同一端取出元素,每次删除的元素都是最后入栈的元素。入栈的元...

分享心得:贵在坚持

2020-10-25
阅读 1 分钟
1.5k
我是一名有3年工作经验的普通php开发工程师,在很多时候都会想着通过学习去提升自己,但学习的道路真的不容易 ……1. 保持积极向上的心态在做任何事情的时候,心态永远都是第一位,好的心态能让你事半功倍。因为在学习知识的时候,很多都是自己没有接触到过的,或者都需要自己花时间进去钻研的,在面对这些"新事物","高难...

数据结构-PHP 实现二分搜索树

2020-10-23
阅读 8 分钟
1.4k
这篇文章是介绍 二叉树 和 二分搜索树,然后通过 PHP 代码定义一下 二分搜索树 的节点,使用递归思想操作向二分搜索树添加元素,然后实现了递归判断二分搜索树上是否包含某个元素,最后分别实现了前序遍历、中序遍历、后序遍历 二分搜索树。

力扣题-使用栈判断是否是有效的括号

2020-10-23
阅读 1 分钟
1.8k
使用栈判断是否是有效的括号题来源于力扣:[链接]思路:遇见左字符,将左字符入栈遇见右字符:如果栈是空的,说明括号无效如果栈不为空,将栈顶字符出栈,与右字符之匹配如果左右字符不匹配,说明括号无效如果左右字符匹配,继续扫描下一个字符所有字符扫描完毕后:栈为空,说明括号有效栈不为空,说明括号无效 {代码......

PHP 实现递归删除链表元素

2020-10-22
阅读 7 分钟
1.3k
这篇文章介绍一下 递归,递归的本质是将原来的问题转化为更小的同一个问题,解决这些更小问题的过程。下面通过两个递归的例子帮助学习对递归的理解。

PHP使用栈实现队列

2020-10-22
阅读 2 分钟
2.1k
出队时,(1):如果 outStack是空的,将 inStack 所有的元素逐一弹出,push 到 outStack,outStack 弹出栈顶元素

二分搜索树介绍&PHP 定义节点

2020-10-22
阅读 2 分钟
1.9k
这篇文章是介绍 二叉树 和 二分搜索树,然后通过 PHP 代码定义一下 二分搜索树(Binary Search Tree) 的节点。1.二叉树1.1 二叉树图示1.2 二叉树节点定义 {代码...} Tips:二叉树每个节点最多有两个儿子,每个节点最多有一个父亲。1.3 二叉树的特点二叉树具有天然的递归结构,每个节点的左儿子或右儿子也是 二叉树。二叉...

3. 数据结构(PHP实现) -- 用数组来实现队列

2020-10-21
阅读 1 分钟
2k
说明:该文章是用数组来实现队列,所以主要会对数组做逻辑操作(数组的逻辑操作在上文有提到 [链接])1. 实现逻辑 {代码...} 2. 执行逻辑 {代码...} 3. 打印结果 {代码...}

数据结构之数组-第一天学习

2020-10-21
阅读 5 分钟
938
数组是一种顺序结构的线性表,所有元素的内存地址是连续的动态数组(Dynamic Array)接口设计size(); // 元素的数量isEmpty(); //是否为空contains(item); // 是否包含某个元素add(E element); // 添加元素到最后面get(int index); // 返回 index 位置对应的元素set(int index,item); // 设置index位置的元素add(int ind...

PHP通过带尾指针的链表实现'队列'

2020-10-21
阅读 4 分钟
1.5k
这篇文章是展示通过 PHP 语言实现一种带尾指针的链表,然后通过链表来实现队列,其中链表的头元素 head 是用于列队出队的,它的时间复杂度 O(1),若在 head 的基础上实现链表尾部入队时间度为 O(n),为了降低入队操作的时间复杂度,可以给链表维护一个带有尾指针的变量 tail,这样每次入队的时候直接操作 tail,出队的时...

2. 数据结构(PHP实现) -- 用数组来实现栈

2020-10-21
阅读 2 分钟
1.6k
说明:该文章是用数组来实现栈,所以主要会对数组做逻辑操作(数组的逻辑操作在上文有提到 [链接])1. 实现逻辑 {代码...} 2. 执行逻辑 {代码...} 3. 打印结果 {代码...}

1. 数据结构(PHP实现) -- 数组

2020-10-21
阅读 5 分钟
1.2k
说明:代码使用了composer类的自动加载,并采用psr4命名规范,如不使用可取消namespace的定义1. 实现逻辑 {代码...} 2. 执行逻辑 {代码...} 3. 打印结果 {代码...}

数据结构-PHP通过链表类对象实现“栈”

2020-10-21
阅读 6 分钟
1.3k
这篇文章是展示如何使用PHP语言实现的链表类(LinkedList),然后通过链表来实现的 栈(Stack) 只能从栈顶添加元素,也只能从栈顶取出元素,是一种 Last In First Out(LIFO),即 后进先出 的结构。

数据结构-PHP 类对象实现 ‘链表’

2020-10-21
阅读 5 分钟
1.9k
这篇文章是展示如何使用PHP语言实现 链表(Linked List) 这种数据结构,Linked List 是一种最简单的动态数据结构,学习 Linked List 可以帮助更深入地理解指针和递归,可以用来组织更复杂的数据结构,它的特点是数据存储在 节点(Node) 中,节点中还存储了指向下一个节点的引用变量,Linked List 不需要处理固定容量的问题。

Redis 数据结构 ( SDS) 实现

2020-10-20
阅读 5 分钟
651
c 语言已经有字符串,为什么redis要重复造轮子1、字符串的长度的处理,c 语言获取字符串需要遍历所有的字符长度 O(n), 而 redis的 sds 可以直接通过 len 来获取 O(1)。 2、内存重新分配,C 语言中涉及到修改字符串的时候会重新分配内存,修改地越频繁,内存分配也就越频繁,而 sds 使用 alloc 预分配,避免了频繁分配内...

数据结构-PHP通过 Array 类对象实现 '队列'

2020-10-20
阅读 6 分钟
1.9k
这篇文章是展示如何使用PHP语言实现队列(Queue)这种数据结构,Queue也是一种线性结构,相比 Array 而言,Queue 对应的操作是 Array 的子集,只能从一端(队尾)添加元素,也只能从另外一端(队首)取出元素,是一种 First In First Out(FIFO),即 先进先出 的结构。

数据结构-PHP 实现 '栈' 结构匹配花括号有效性

2020-10-20
阅读 7 分钟
1.2k
这里是一个 栈 类,它的继承了数组类的方法,通过数组的增删查封装的一个 栈 类,实现了 入栈(push)、出栈(pop)、查看栈顶(peek) :

数据结构-PHP通过 Array 类对象实现 "栈"

2020-10-19
阅读 5 分钟
1.4k
这篇文章是展示如何使用PHP语言实现栈(Stack)这种数据结构,Stack也是一种线性结构,相比 Array 而言,Stack 对应的操作是 Array 的子集,只能从一端添加元素,也只能从一端取出元素,是一种 Last In First Out(LIFO),即 后进先出 的结构,Stack 的应用很多,如 'undo 操作(撤销)'、'程序调用系统栈'。

数据结构-JAVA实现数组

2020-10-19
阅读 8 分钟
2.6k
Tips:当容量满了的时候可能存在一直触发 resize() ,使得时间复杂度变为 O(n),这种情况称为复杂度震荡,解决办法是,当 size 小于等于 1/4 容量的时候才缩小容量。

数据结构-PHP实现Array

2020-10-19
阅读 6 分钟
2k
这篇文章是展示如何使用PHP语言实现Array这种数据结构,有人可能会问为什么要用 PHP 而不用其他语言实现呢?这里我想说明一下,很多 PHP 程序员缺乏数据结构和算法相关的基础知识,这里主要是想通过 PHP 实现数据结构的过程来学习数据结构的原理,还请读者勿要纠结使用什么语言了,了解清楚原理之后,读者可以通过自己的...