数据结构从宏观的概念层次讲呢,就是一组数据元素及之间的关系。编程的世界里,最简单也最经典的数据结构就是栈和队列。
栈,体现的是后进先出,即LIFO。
队列,体现的是先进先出,即FIFO。
php为数组定义了太多的操作函数,可能phper们常用的也就那么几个,list、each、count、next、prev、reset、end、sort、rsort、in_array、array_shift、array_unshift、array_pop、array_push等等。
现在,咱就用几个常用函数来实现栈、队列。
栈
array_pop() //尾出
array_push() //尾进
或
array_shift()//头进
array_unshift()//头出
以上两组操作都能实现FIFO的算法,拿一个经典的例子测试下。
用例:验证一个数学算式是否正确,比如{2*3[x*y+5+m*(i-j)/3]+k*(4+(t+9))}。
分析:对于一个算式的正确与否,就是体现在,各种括号的匹配上,括号完全匹配,算式就没问题,那怎么来检验一个算式里的括号匹配呢,碰到过很多人想着用正则。我是想不通这正则怎么写,怎么实现嵌套关系。这个时候栈就派上用场了。看下边代码。
<?php function check($arg) { $arr = str_split($arg); $leftBracket = array('{','[','(');//左括号 $rightBracket = array('}',']',')');//右括号 $stack = array(); reset($arr); while (list($key,$value)=each($arr)) { if (in_array($value, $leftBracket,TRUE)) {//左括号入栈 array_push($stack, $value); } elseif (in_array($value, $rightBracket)) {//右括号跟栈顶比较 $stackTop = end($stack);//取栈顶 if(isset($stackTop) && !empty($stackTop)) { if(array_search($value, $rightBracket) === array_search($stackTop, $leftBracket)) {//已匹配成功的出栈 array_pop($stack); } else {//匹配失败 return false; } } else {//右括号多余左括号 return false; } } } if(!empty($stack)) {//左括号多余右括号 return false; } else { return true; } } $test = '{2*3[x*y+5+m*(i-j)/3]+k*(4+(t+9))}'; print check($test); ?>
上述代码中的栈,是由array_pop和array_push实现的;同理,也可以用array_shift和array_unshift实现。
队列
array_shift() //头出
array_push() //尾进
或
array_unshift //头进
array_pop //尾出
未完待续……
相关推荐
队列是一种先进先出(First In First Out, FIFO)的数据结构,类似于现实生活中的排队等候系统,如银行的排号机,最先排在队伍中的人会最先得到服务。 为了使用PHP数组实现队列,我们需要掌握以下两个关键操作: 1...
PHP数组也可用于实现栈,但同样需考虑内存限制。 4. 链表(Linked List):链表中的节点包含数据和指向下一个节点的指针。PHP没有内置的链表数据结构,但可以通过对象实现。 5. 树(Tree):树是一种非线性的数据...
8. **图**:虽然PHP本身不支持图形数据结构,但通过数组和对象可以实现图的表示,这对于网络爬虫、关系分析等应用非常有用。 9. **字符串处理**:在PHP中,字符串也是一种特殊的数据结构,了解其内部工作原理和操作...
资源名称:PHP中的数组与数据结构内容简介:1. 数组的概述2. 数组的定义3. 数组的遍历4. 预定义数组5. 数组的相关处理函数一、数组的概述PHP 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此...
在这种方法中,我们可以使用PHP数组作为基础数据结构。队列的头部用于出队,尾部用于入队。当一个元素出队时,我们可以通过移除数组的第一个元素(即key为0的元素)来实现;当一个元素入队时,我们可以在数组的末尾...
PHP数组进行了多方面的优化,因此可以将其视为真正的数组、列表(向量)、散列表(映射的一种实现)、字典、集合、栈、队列等多种形式。数组元素的值甚至可以是另一个数组,支持创建树形结构或多维数组。 #### PHP...
通过不同的使用方式,PHP数组可以被用作列表(向量)、哈希表、字典、集合、栈、队列等。 数组中的元素可以通过键来访问。键可以是整数或字符串,这使得PHP数组既可以用作索引数组(index array),也可以用作关联...
总结来说,`queueOp.class.php`提供的`QueueOp`类为PHP开发者提供了一种方便的方式来管理和操作队列数据结构,适用于各种需要按顺序处理任务的场景,如任务调度、消息传递等。通过理解和使用这个类,开发者可以更...
在实际开发中,数组常常与其他数据结构结合使用,例如,栈和队列可以基于数组实现。栈是后进先出(LIFO)的数据结构,可以用数组模拟;队列是先进先出(FIFO)的,同样可以使用数组来实现。这两种结构在处理任务调度...
常见的数据结构包括数组、链表、栈、队列、树、图、哈希表等。在PHP中,虽然没有内置的数据结构类库,但我们可以通过数组模拟这些数据结构。 1. **数组**:PHP中的数组是最基础的数据结构,它可以存储多个值,并...
常见的数据结构包括数组、链表、栈、队列、树、图等。在PHP中,虽然没有直接的类库来创建这些数据结构,但可以通过对象或者内置类型来模拟实现。 1. **数组**:PHP中的数组是一种灵活的数据结构,可以存储任意类型...
线性结构是最基本的数据结构之一,包括数组、链表、栈、队列等。 ##### 数组(Array) **概述** 数组是一种简单的线性数据结构,其特点是元素在内存中是连续存储的,并且可以通过索引快速访问。 **数组操作** - **...
通过以上详细的知识点解析,我们可以看到PHP实现的双向队列类是一个结合了队列和栈操作特性、具有强大功能的数据结构。其在代码实现中考虑了多种操作场景,提供了灵活的使用方式,并且结构清晰,易于理解和使用。
多种语言包括java、python、c语言、go语言、php等来实现的数据结构的源码,包含数组、 链表、栈、队列、递归、排序、二分查找、散列表、二叉树、堆、图、回溯、分治、动态规划的实现方法。非常适合学习数据结构的小...
本文将详细讲解如何使用PHP数组来实现堆栈和队列的功能。 首先,我们来看堆栈(Stack)。堆栈是一种“后进先出”(Last In, First Out,简称LIFO)的数据结构。在PHP中,我们可以利用数组来模拟堆栈的行为。入栈...
因此,在使用这种方法时,应尽量优化数据结构,或者考虑使用非递归的解决方案,如使用栈或队列等数据结构。同时,为了确保系统的安全性,应当确保输入数据的合法性,防止恶意攻击,例如 SQL 注入等。 总结来说,PHP...
常见的数据结构包括数组、链表、栈、队列、树、图、哈希表等。在PHP中,可以利用数组这一基本数据类型来构建复杂的数据结构,例如通过多维数组模拟栈或队列。 1. 数组:PHP中的数组可以存储不同类型的元素,非常...
在PHP中,虽然不像C++或Java那样有内置的数据结构库,但开发者可以通过数组、对象等方式实现这些数据结构。 1. **数组**:PHP中的数组是最基本的数据结构,它可以存储一系列的元素,每个元素都有唯一的键(key)和...