
正文
php双向队列数据结构 双向链表实现队列
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
用PHP写的这个双向队列应该怎么使用
?php
class Deque{
private $queue = array();
public function addFirst($item){
return array_unshift($this-queue, $item);
}
public function addLast($item){
return array_push($this-queue, $item);
}
public function removeFirst(){
return array_shift($this-queue);
}
public function removeLast(){
return array_pop($this-queue);
}
}
相关问答
Q1: 数据结构:队列:双端队列
输出受限php双向队列数据结构的双端队列,即删除限制在一端进行,而插入仍允许在两端进行.
输入受限的双端队列,即插入限制在一端进行,而删除仍允许在两端进行.
理解php双向队列数据结构了概念之后看看题目php双向队列数据结构,应该比较容易理解了:
第一题:
由于队列输出受限,故只能在一端进行输出:
分析答案A:A的输入序列为abcd,输出结果为dacb ,由输出受限性质可知da开头的结果只有dabc; A项为错误答案;
分析答案B:B的输出结果为:cadb ;其输入输出顺序为(可以画图帮助理解): 先输入a,然后在非输出端输入b,这时队列的序列为ba(假设左端为限制端,下同),接着在输入端输入c,这时队列的序列为bac,输出c,再输出a,在输出端输入d,这时队列的序列为bd,输出d,输出b;得到输出序列为cadb;
分析答案D:先输入a,接着在输出端输入b,然后再另一端输入c,最后在输出端输入d,这时队列的序列为cabd;其输出结果为dbac;
分析答案C:由db开头的输出结果只有dbac;故错误;
Q2: 我要交课程设计,最好详细点。。。。。。。谢谢了
设顺序双向循环队列的数据结构定义为:
设Q为BSeqCQuene类变量,并设初始化操作时有Q-rear=Q-front=0,要求:
(1)给出顺序双向循环队列满和空的条件;
(2)给出顺序双向循环队列抽象数据类型BSeqCQuene的入队和出队的操作算法。
例题23分析
(1)对于正向循环队列,front为队头指针,rear为队尾指针,正向循环队列的数据元素下标值递增;对于反向循环队列,则rear为队头指针,front为队尾指针,反向循环队列的数据元素下标值递减。设计双向循环队列的方法类似于顺序循环队列的设计方法,即把表元素设计成首尾衔接。因此,有
正向循环队列:队列空的条件为Q-rear=Q-front
队列满的条件为(Q-rear+1)%MaxSize=Q-front
反向循环队列:队列空的条件为Q-rear=Q-front
队列满的条件为Q- front -1=Q- rear
(当Q-front-10时,令Q-front= MaxSize-1)
(2)算法思想:正向循环队列的入队和出队操作算法与顺序循环队列的入队和出队操作算法完全相同;反向循环队列的入队和出队操作算法与顺序循环队列的入队和出队操作算法思想类似,但要把rear看做是队头指针,把front看做是队尾指针,入队操作且当front-10时,令front= MaxSize-1。其算法描述如下:
Q3: PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
队列这种数据结构更简单,就像我们生活中排队一样,它的特性是先进先出(FIFO)。
PHP
SPL中SplQueue类就是实现队列操作,和栈一样,它也可以继承双链表(SplDoublyLinkedList)轻松实现。
SplQueue类摘要如下:
SplQueue简单使用如下:
复制代码
代码如下:
$queue
=
new
SplQueue();
/**
*
可见队列和双链表的区别就是IteratorMode改变了而已,栈的IteratorMode只能为:
*
(1)SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_KEEP
(默认值,迭代后数据保存)
*
(2)SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_DELETE
(迭代后数据删除)
*/
$queue-setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_DELETE);
//SplQueue::enqueue()其实就是
SplDoublyLinkedList::push()
$queue-enqueue('a');
$queue-enqueue('b');
$queue-enqueue('c');
//SplQueue::dequeue()其实就是
SplDoublyLinkedList::shift()
print_r($queue-dequeue());
foreach($queue
as
$item)
{
echo
$item
.
PHP_EOL;
}
print_r($queue);
而优先队列SplPriorityQueue是基于堆(后文介绍)实现的。
SplPriorityQueue的类摘要如下:
SplPriorityQueue简单使用:
$pq
=
new
SplPriorityQueue();
$pq-insert('a',
10);
$pq-insert('b',
1);
$pq-insert('c',
8);
echo
$pq-count()
.PHP_EOL;
//3
echo
$pq-current()
.
PHP_EOL;
//a
/**
*
设置元素出队模式
*
SplPriorityQueue::EXTR_DATA
仅提取值
*
SplPriorityQueue::EXTR_PRIORITY
仅提取优先级
*
SplPriorityQueue::EXTR_BOTH
提取数组包含值和优先级
*/
$pq-setExtractFlags(SplPriorityQueue::EXTR_DATA);
while($pq-valid())
{
print_r($pq-current());
//a
c
b
$pq-next();
}
Q4: PHP SplQueue 队列用法
在PHP中,我们可以用array来简单模拟队列的功能,array_push出列,array_pop入列,但是更高效的用法还是要使用SplQueue这个官方提供的队列类来做,记录一下简单的用法。
我们注意到,SplQueue中还有push和pop方法,它们与enqueue和dequeue有什么区别呢?
push和enqueue没有区别,但是pop等同于栈的pop(FILO),每次弹出最后压入队列的元素。
而队列是先进先出(FIFO)的,所以每次弹出的都是剩下的节点中先入列节点
以上是PHP队列的简单用法,下面是一些迭代器指针相关的操作
php双向队列数据结构的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于双向链表实现队列、php双向队列数据结构的信息别忘了在本站进行查找喔。






