"/>
·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分✅卡密📒收藏夹👽聊天室
DZ插件网 门户 站长圈 查看内容

PHP常见的5种数据结构

2022-3-1 14:40| 发布者: admin| 查看: 465| 评论: 0|原作者: 架构师学习路线

摘要: 前言/PREFACEPHP有着非常强大的SPL标准库,从而提供了一套标准的数据结构,分别有数组、链表、栈、队列、递归、最大堆、最...

前言/PREFACE


PHP有着非常强大的SPL标准库,从而提供了一套标准的数据结构,分别有数组、链表、栈、队列、递归、最大堆、最小堆、优先列队、阵列、映射。


chu  shu




常见的5种数据结构


1

数组


数组(Array)是一种线性表的数据结构,它用一段连续的内存空间,来存储具有相同类型的值。但是由于在PHP的底层定义中,数组是通过散列表实现的,所以这段定义并不适用。PHP的数组可以存储任意数据类型的数据,所以相对于Java来说效率较高。在Java的数组中,每次定义都要先声明属于组的类型,在查找数组时,效率是O(1),但是在插入和删除时,算法复杂度是O(n),因为在插入操作时,要先找到插入的位置,然后将该位置及往后的元素都往后移一位。删除同理。但是PHP却不受此约束。


2


栈是一种特殊的线性表,因为它限定只能在线性表的一端进行插入或删除元素(即进栈和出栈)。并且满足先进后出的特点。我们把允许插入和删除的一端叫做栈顶,另一个端叫做栈底,不含任何数据的栈叫做空栈。栈支持通过数组/链表实现,通过数组实现的通常叫做顺序栈,通过链表实现的叫做链栈。


3

递归

递归,简单来讲就是在函数定义中调用函数自身,将一个大的问题拆分成多个小问题,逐一击破后最后归并结果。判断一个问题是否可以通过递归来解决,主要看它是否满足以下三个条件: 

a、一个问题的解可以分解为几个子问题的解

b、这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样

c、存在递归终止条件 

(注意:递归一定要有终止条件,否则会导致函数被无限调用最终致使内存溢出)。


4

队列

队列和栈类似,队列也是一种特殊的线性表结构,只不过队列是在一端插入,另一端删除,就跟我们平常排队一样,从队尾入队,在队头出去,所以队列的特性是先入先出,允许插入的一端叫队尾,允许删除的一端叫队头。队列也可以通过数组和链表实现,通过数组实现的叫顺序队列,通过链表实现的叫做链式队列,栈只需要一个栈顶指针就可以了,因为只允许在栈顶插入删除,但是队列需要两个指针,一个指向队头,一个指向队尾。


5

链表

链表和数组不同,链表并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用,一般节点有两个属性(data和next)。


链表有多种类型,最简单的是单链表:

单链表:是最原始的链表。单链表有两个节点比较特殊,头结点和尾节点。头结点记录链表的基地址,通过它可以遍历得到整条链表。尾节点的指针不是指向节点,而是指向空地址NUll,表示这是最后一个节点。单向链表插入和删除的时间复杂度是O(1),而查询的时间复杂度是O(n)

疑问:当进行插入和删除操作时要先查询相应节点,查询的时间复杂度是O(n),为什么插入和删除的的复杂度是O(1)呢?可以将插入删除看作是单纯的插入删除,不包含查询在里面。当做两个不同的操作来看待。

 

在单链表的基础上扩展有了循环链表,循环链表是将尾节点的next指向了头结点,从而实现了收尾相连。可以解决(约瑟夫环)问题。

 

双向链表:与单向链表的区别是除了有一个指向下一个节点的指针外,还有一个用于指向上一个节点的指针。从而实现通过O(1)复杂度找到上一个节点。使得双向链表在插入删除比单向链表更高效。以删除为例,在删除节点时,我们还要获取其前驱节点,让前驱节点的指针指向被删除节点的下一个节点。在单向链表中,获取前驱节点的复杂度是O(n),但是双向链表O(1)直接获取前驱节点。所以双向链表插入和删除的时间复杂度才是真正的O(1)。

 

最后一种就是双向循环链表,就是双向链表和单向链表的结合。



MEET/YOUSELF

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜




上一篇:【课程大纲】19期PHP线上班
下一篇:论相互宝的倒掉

鲜花

握手

雷人

路过

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.145.10.80,GMT+8, 2024-11-23 20:45 , Processed in 0.202047 second(s), 47 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯
扫一扫添加微信客服
QQ客服返回顶部
返回顶部