当前位置: 首页 > 后端技术 > PHP

【SPL标准库专题(七)】数据结构:SplPriorityQueue

时间:2023-03-29 16:40:38 PHP

普通队列是一种先进先出的数据结构,元素追加在队尾,元素从队头取出。在优先级队列中,元素被赋予优先级。访问元素时,首先获取优先级最高的元素。优先级队列具有最高级别的先出(largest-in,first-out)行为特点。综上所述,普通队列有先进先出原则,优先级队列有高优先级先出原则,这个优先级是可以设置的;classsummary//1.没有实现ArrayAccess接口,所以不能像数组一样操作;SplPriorityQueueimplementsIterator,Countable{/*method*/public__construct(void)//比较方法,内部要使用冒泡排序,对于权重值,返回0表示等于,返回正整数表示大于,返回负整数表示小于;//默认是权重值越优先,也可以被子类覆盖改成更小的权重值,越优先publicintcompare(mixed$priority1,mixed$priority2)publicmixedextract(void)//恢复到上一个??被销毁的节点?测试没用;publicvoidrecoverFromCorruption(void)publicvoidsetExtractFlags(int$flags)publicvoidinsert(mixed$value,mixed$priority)publicintcount(void)publicmixedcurrent(void)publicboolisEmpty(void)公共混合(void)publicvoidnext(void)publicvoidrewind(void)publicmixedtop(void)publicboolvalid(void)}ExampleclassPQtestextendsSplPriorityQueue{//覆盖父类,将其优先级规则改为权重值越小越优先;公共函数比较($priority1,$priority2){如果($priority1===$priority2)返回0;返回$priority1>$priority2?-1:1;}}$pq=newPQtest();//设置值和优先级值$pq->insert('a',10);$pq->insert('b',1);$pq->insert('c',8);/***设置元素出队方式*SplPriorityQueue::EXTR_DATA只提取值*SplPriorityQueue::EXTR_PRIORITY只提取优先级*SplPriorityQueue::EXTR_BOTH提取包含值和优先级的数组*/$pq->setExtractFlags(PQtest::EXTR_BOTH);//从最上面取一个节点,将其下面的节点移动为最上面的节点;print_r($pq->extract());/*[data]=>b[priority]=>1*/$pq->recoverFromCorruption();//取出最上面的节点print_r($pq->extract());/*[data]=>c[priority]=>8*///从前一个节点恢复?没有效果?$pq->recoverFromCorruption();print_r($pq->current());$pq->rewind();while($pq->valid()){print_r($pq->current());echoPHP_EOL;$pq->下一个();}