`

php数组实现队列、栈等数据结构

阅读更多

        数据结构从宏观的概念层次讲呢,就是一组数据元素及之间的关系。编程的世界里,最简单也最经典的数据结构就是栈和队列。

        栈,体现的是后进先出,即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 //尾出

 

 

未完待续……

分享到:
评论

相关推荐

    PHP使用数组实现队列

    队列是一种先进先出(First In First Out, FIFO)的数据结构,类似于现实生活中的排队等候系统,如银行的排号机,最先排在队伍中的人会最先得到服务。 为了使用PHP数组实现队列,我们需要掌握以下两个关键操作: 1...

    PHP各种数据结构实现

    PHP数组也可用于实现栈,但同样需考虑内存限制。 4. 链表(Linked List):链表中的节点包含数据和指向下一个节点的指针。PHP没有内置的链表数据结构,但可以通过对象实现。 5. 树(Tree):树是一种非线性的数据...

    php数据结构视频教程

    8. **图**:虽然PHP本身不支持图形数据结构,但通过数组和对象可以实现图的表示,这对于网络爬虫、关系分析等应用非常有用。 9. **字符串处理**:在PHP中,字符串也是一种特殊的数据结构,了解其内部工作原理和操作...

    PHP中的数组与数据结构

    资源名称:PHP中的数组与数据结构内容简介:1. 数组的概述2. 数组的定义3. 数组的遍历4. 预定义数组5. 数组的相关处理函数一、数组的概述PHP 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此...

    PHP实现双向队列

    在这种方法中,我们可以使用PHP数组作为基础数据结构。队列的头部用于出队,尾部用于入队。当一个元素出队时,我们可以通过移除数组的第一个元素(即key为0的元素)来实现;当一个元素入队时,我们可以在数组的末尾...

    利用php数组对百万数据进行排重

    PHP数组进行了多方面的优化,因此可以将其视为真正的数组、列表(向量)、散列表(映射的一种实现)、字典、集合、栈、队列等多种形式。数组元素的值甚至可以是另一个数组,支持创建树形结构或多维数组。 #### PHP...

    数组与数据结构

    通过不同的使用方式,PHP数组可以被用作列表(向量)、哈希表、字典、集合、栈、队列等。 数组中的元素可以通过键来访问。键可以是整数或字符串,这使得PHP数组既可以用作索引数组(index array),也可以用作关联...

    php实现队列操作的类.zip

    总结来说,`queueOp.class.php`提供的`QueueOp`类为PHP开发者提供了一种方便的方式来管理和操作队列数据结构,适用于各种需要按顺序处理任务的场景,如任务调度、消息传递等。通过理解和使用这个类,开发者可以更...

    数组的使用

    在实际开发中,数组常常与其他数据结构结合使用,例如,栈和队列可以基于数组实现。栈是后进先出(LIFO)的数据结构,可以用数组模拟;队列是先进先出(FIFO)的,同样可以使用数组来实现。这两种结构在处理任务调度...

    PHP算法与数据结构学习.zip

    常见的数据结构包括数组、链表、栈、队列、树、图、哈希表等。在PHP中,虽然没有内置的数据结构类库,但我们可以通过数组模拟这些数据结构。 1. **数组**:PHP中的数组是最基础的数据结构,它可以存储多个值,并...

    数据结构(PHP描述).zip

    常见的数据结构包括数组、链表、栈、队列、树、图等。在PHP中,虽然没有直接的类库来创建这些数据结构,但可以通过对象或者内置类型来模拟实现。 1. **数组**:PHP中的数组是一种灵活的数据结构,可以存储任意类型...

    数据结构和算法分析的PHP描述

    线性结构是最基本的数据结构之一,包括数组、链表、栈、队列等。 ##### 数组(Array) **概述** 数组是一种简单的线性数据结构,其特点是元素在内存中是连续存储的,并且可以通过索引快速访问。 **数组操作** - **...

    php实现的双向队列类实例

    通过以上详细的知识点解析,我们可以看到PHP实现的双向队列类是一个结合了队列和栈操作特性、具有强大功能的数据结构。其在代码实现中考虑了多种操作场景,提供了灵活的使用方式,并且结构清晰,易于理解和使用。

    数据结构与算法源码.zip

    多种语言包括java、python、c语言、go语言、php等来实现的数据结构的源码,包含数组、 链表、栈、队列、递归、排序、二分查找、散列表、二叉树、堆、图、回溯、分治、动态规划的实现方法。非常适合学习数据结构的小...

    PHP基于数组实现的堆栈和队列功能示例

    本文将详细讲解如何使用PHP数组来实现堆栈和队列的功能。 首先,我们来看堆栈(Stack)。堆栈是一种“后进先出”(Last In, First Out,简称LIFO)的数据结构。在PHP中,我们可以利用数组来模拟堆栈的行为。入栈...

    PHP递归遍历多维数组实现无限分类的方法_.docx

    因此,在使用这种方法时,应尽量优化数据结构,或者考虑使用非递归的解决方案,如使用栈或队列等数据结构。同时,为了确保系统的安全性,应当确保输入数据的合法性,防止恶意攻击,例如 SQL 注入等。 总结来说,PHP...

    PHP也可以写数据结构和算法.zip

    常见的数据结构包括数组、链表、栈、队列、树、图、哈希表等。在PHP中,可以利用数组这一基本数据类型来构建复杂的数据结构,例如通过多维数组模拟栈或队列。 1. 数组:PHP中的数组可以存储不同类型的元素,非常...

    PHP数据结构算法大全

    在PHP中,虽然不像C++或Java那样有内置的数据结构库,但开发者可以通过数组、对象等方式实现这些数据结构。 1. **数组**:PHP中的数组是最基本的数据结构,它可以存储一系列的元素,每个元素都有唯一的键(key)和...

Global site tag (gtag.js) - Google Analytics