Code example of php queue implementation

不言
Release: 2023-04-04 12:50:01
forward
2415 people have browsed it

This article brings you code examples about PHP queue implementation. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

The queue is a special linear table that only allows deletion operations at the front end of the table, which can be called front; and insertion operations at the back end of the table, which can be called rear. operate. The queue, like the stack, is a linear list with restricted operations. The difference from the stack is that the queue follows the "first in, first out" principle, while the stack follows the "first in, last out" principle. The end of the queue where the insertion operation is performed is called the tail of the queue, and the end where the deletion operation is performed is called the head of the queue. Insertion operations are only allowed at the end of the queue, and deletion operations are allowed at the head of the queue.

The data elements of the queue are also called queue elements. Inserting an element at the end of the queue is called enqueuing, and deleting an element at the head of the queue is called dequeuing. Specific implementation reference code:

<?php
/**
*  php队列算法
*  
*  Create On 2010-6-4
*  Author Been
*  QQ:281443751
*  Email:binbin1129@126.com
**/
class data {
    //数据
    private $data;
    
    public function __construct($data){
        $this->data=$data;
        echo $data.":哥进队了!<br>";
    }
    
    public function getData(){
        return $this->data;
    }
    public function __destruct(){
        echo $this->data.":哥走了!<br>";
    }
}
class queue{
    protected $front;//队头
    protected $rear;//队尾
    protected $queue=array(&#39;0&#39;=>&#39;队尾&#39;);//存储队列
    protected $maxsize;//最大数
    
    public function __construct($size){
        $this->initQ($size);
    }
    //初始化队列
    private function initQ($size){
        $this->front=0;
        $this->rear=0;
        $this->maxsize=$size;
    }
    //判断队空
    public function QIsEmpty(){
        return $this->front==$this->rear;
    }
    //判断队满
    public function QIsFull(){
        return ($this->front-$this->rear)==$this->maxsize;
    }
    //获取队首数据
    public function getFrontDate(){
        return $this->queue[$this->front]->getData();
    }
    //入队
    public function InQ($data){
        if($this->QIsFull())echo $data.":我一来咋就满了!(队满不能入队,请等待!)<br>";
        else {
            $this->front++;
            for($i=$this->front;$i>$this->rear;$i--){
                //echo $data;
                if($this->queue[$i])unset($this->queue[$i]);
                $this->queue[$i]=$this->queue[$i-1];
            }
            $this->queue[$this->rear+1]=new data($data);
            //print_r($this->queue);
            //echo $this->front;
            echo &#39;入队成功!<br>&#39;;
        }
    }
    //出队
    public function OutQ(){
        if($this->QIsEmpty())echo "队空不能出队!<br>";
        else{
            unset($this->queue[$this->front]);
            $this->front--;
            //print_r($this->queue);
            //echo $this->front;
            echo "出队成功!<br>";
        }
    }
}
$q=new queue(3);
$q->InQ("小苗");
$q->InQ(&#39;马帅&#39;);
$q->InQ(&#39;溜冰&#39;);
$q->InQ(&#39;张世佳&#39;);
$q->OutQ();
$q->InQ("周瑞晓");
$q->OutQ();
$q->OutQ();
$q->OutQ();
$q->OutQ();
Copy after login

There are two classes in this case:

The first one is the data class, used to implement data Storage and enqueuing and dequeuing of queue elements;

The second is the queue class, which is used for some enqueuing and dequeuing operations of queue elements.

The queue contains four attributes:

front (the head of the queue)

rear (the tail of the queue)

maxsize (the length of the queue, That is, the number of queue elements)

Queue (an object that stores all queue elements that have been queued)

Scenario description:

1. When initializing the queue, generate a queue and pass Enter a parameter as maxsize to initialize the queue, set the rear of the queue to 0, and set the front of the queue to 0. At this time, there is only element 0 in the queue, and both rear and front point to it.

2. When joining the queue, you first need to determine whether the queue is full (front-rear == maxsize). If it is full, insertion is not allowed. If it is not full, insertion is allowed. When inserting, front is incremented, and then all elements of the queue are moved forward by one position (leaving the tail position of the queue to insert new elements), and then a new data object is generated and inserted into the tail position of the queue.

3. When dequeuing, determine whether the queue is empty (front == rear). If it is empty, it cannot be dequeued. If it is not empty, delete the object pointed to by front and decrement front to complete the dequeue.

The running results are as follows:

小苗:哥进队了!
入队成功
马帅:哥进队了!
入队成功
溜冰:哥进队了!
入队成功
张世佳:我一来咋就满了!(队满不能入队,请等待!)
小苗:哥走了!
出队成功!
周瑞晓:哥进队了!
入队成功
马帅:哥走了!
出队成功!
溜冰:哥走了!
出队成功!
周瑞晓:哥走了!
出队成功!
队空不能出队!
队空不能出队!
Copy after login

The above is the detailed content of Code example of php queue implementation. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:segmentfault.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template