PHP数据结构与算法:队列
2018-03-21 00:00
183 查看
摘要: php队列实现
队列是一种先进先出FIFO的(First In First Out)的线性表。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!
假设队列是q =(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍最后。
双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。
一、概念
队列(queue)是只允许在一端进行插入操作、而在另一端进行删除操作的线性表。队列是一种先进先出FIFO的(First In First Out)的线性表。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!
假设队列是q =(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍最后。
二、队列的PHP实现
同栈一样,队列也可以用顺序表或者链表实现。<?php /** * 队列基本操作 * 1.enqueue(item) 入队 * 2.dequeue() 出队 * 3.isEmpty() 判断一个队列是否为空 * 4.size() 队列的大小 */ class Queue { /** * 队列元素集 * @var */ private $items; /** * Queue constructor. */ public function __construct() { $this->items = []; } /** * 判断一个队列是否为空 * @return bool */ public function isEmpty() { return empty($this->items); } /** * 入队 * @param $item */ public function enqueue($item) { array_unshift($this->items,$item); } /** * 出队 * @return mixed */ public function dequeue() { return array_pop($this->items); } /** * 队列的大小 * @return int */ public function size() { return count($this->items); } } $q = new Queue(); $q->enqueue('hello'); $q->enqueue('world'); var_dump($q->size()); var_dump($q->dequeue()); var_dump($q->dequeue()); var_dump($q->size());
三、双端队列
1.概念
双端队列deque(double-ended queue),是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。
2.PHP实现
<?php /** * 双端队列基本操作 * 1.unshift(item) 入头 * 2.push(item) 入尾 * 3.shift() 出头 * 4.pop() 出尾 * 5.isEmpty() 队空 * 6.size() 大小 */ class Dequeue { /** * 队列元素集 * @var */ private $items; /** * Queue constructor. */ public function __construct() { $this->items = []; } /** * 判断一个队列是否为空 * @return bool */ public function isEmpty() { return empty($this->items); } /** * 队头加入一个元素 * @param $item */ public function unshift($item) { array_unshift($this->items,$item); } /** * 队尾加入一个元素 * @param $item */ public function push($item) { array_push($this->items,$item); } /** * 队头删除一个元素 * @return mixed */ public function shift() { return array_shift($this->items); } /** * 队尾删除一个元素 * @return mixed */ public function pop() { return array_pop($this->items); } /** * 队列的大小 * @return int */ public function size() { return count($this->items); } } $q = new Dequeue(); var_dump($q->isEmpty()); $q->unshift(1); $q->push(2); var_dump($q->size()); $q->shift(); $q->pop(); var_dump($q->size());
相关文章推荐
- 算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈
- 算法与数据结构题目的 PHP 实现:栈和队列 由两个栈组成的队列
- 数据结构和算法 – 3.堆栈和队列
- 栈和队列7 – 数据结构和算法29
- 数据结构与算法之三(栈和队列的java实现)
- 栈和队列 - 数据结构和算法23
- 数据结构之自建算法库——顺序环形队列
- 队列的数据结构定义及算法
- 【算法和数据结构】_9_线性结构_队列_续_1
- 递归算法的数据结构和算法 C++和PHP达到
- PHP常用算法和数据结构示例
- 在网上看到使用PHP实现常见的数据结构和算法
- 算法与数据结构基础6:C++队列的简单实现
- 数据结构与算法:python语言描述之队列
- 浅谈算法和数据结构:栈和队列
- 浅谈算法和数据结构: 五 优先级队列与堆排序
- C 数据结构 算法 Java 数据库 PHP JSP Web Dev ... ... 我会坚持走下去的
- 在网上看到使用PHP实现常见的数据结构和算法
- 算法和数据结构---排序---优先级队列
- MIT:算法导论——7.1.基本数据结构_栈、队列、链表、有根树