
正文
php数据结构入队和出对 php基本数据结构及算法
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
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();
}
相关问答
Q1: 循环队列中入队与出队算法
如果循环队列每个元素有两个指针,一个指向其前面的元素pPre,一个指向后面的元素pNext,出对和入队就是修改一下指针啊。
比如指向要出队的元素的指针是 pDel,那么出队就应该是:
pDel-pPre-pNext = pDel-pNext;
pDel-pNext-pPre = pDel-pPre;
如果循环队列每个元素只有一个指向其后元素的指针pNext,那么需要遍历整个队列,找到要出队元素的前一个元素,然后就和上面的算法差不多了。
如果经常要进行出队操作,在设计数据结构的时候还是建议每个元素使用两个指针。
Q2: 数据结构(C语言版)入队操作和出对操作怎么写?
你的结构体不对啊php数据结构入队和出对,还缺一个next指针呢php数据结构入队和出对,要不怎么构建队列啊
应该是这样吧php数据结构入队和出对:
typedef struct _LinkNode
{
Elemtype elem[SIZE];
int rear;
int length;
struct _LinkNode* next;
}Squeue;
代码如下php数据结构入队和出对:
typedef struct _LinkNode
{
Elemtype elem[SIZE];
int rear;
int length;
struct _LinkNode* next;
}Squeue;
//队列
class LinkQueue
{
public:
LinkQueue():head(NULL)
{
}
~LinkQueue()
{
while(head != NULL)
{
Squeue* p=head;
head=head-next;
delete p;
}
}
void pop()
{
if (head != NULL)
{
Squeue* p=head;
head=head-next;
delete p;
}
}
int front()
{
if (head != NULL)
{
return 1;
}
return -1;
}
void push(Elemtype elem[SIZE],int rear,int length)
{
int i;
Squeue* p=new Squeue;
for(i=0;iSIZE;i++)
memcpy(p-elem[i],sizeof(Elemtype),elem[i]);
p-rear = rear;
p-length = length;
p-next = NULL;
if (head==NULL)
{
head = p;
}
else
{
Squeue* node=head;
while(node-next != NULL)
{
node=node-next;
}
node-next=p;
}
}
int isEmpty()
{
return (head == NULL);
}
private:
Squeue* head;
};
php数据结构入队和出对的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于php基本数据结构及算法、php数据结构入队和出对的信息别忘了在本站进行查找喔。






