>  기사  >  백엔드 개발  >  PHP 대기열 알고리즘을 구현하는 방법은 무엇입니까?

PHP 대기열 알고리즘을 구현하는 방법은 무엇입니까?

不言
不言원래의
2018-07-20 17:58:101459검색

PHP에서 큐를 구현하는 방법은 무엇인가요? 큐는 선입선출 방식으로 작동하는 선형 테이블입니다. 이 기사에서 소개하는 PHP 큐 알고리즘의 구현을 살펴보겠습니다.

이 대기열 알고리즘에는 두 가지 클래스가 있습니다. 하나는 데이터를 저장하는 데이터 클래스이고, 두 번째는 대기열 클래스입니다.

먼저 큐에는 front(큐의 선두, 즉 큐에서 나가고 싶은 사람), Rear(큐의 꼬리는 여기에서 항상 0을 가리킨다) 큐(모든 데이터 객체를 저장한다)가 들어있다. 대기열에 있으며 기본적으로 비어 있으면 대기열에 하나의 요소가 있습니다) 앞과 뒤가 모두 그를 가리킬 때) maxsize의 네 가지 속성(큐의 길이)

응용 지침:

1 대기열 초기화 : 큐를 생성하고 매개변수를 maxsize로 전달하여 큐를 초기화합니다. Rear를 0으로 설정하고 Front를 0으로 설정합니다. 큐에 요소 0만 있으면 Rear와 Front가 모두 그를 가리킵니다

2. 대기열이 가득 찼는지 확인합니다(front-rear==maxsize). 가득 차면 프롬프트가 표시됩니다. 가득 차 있지 않으면 먼저 front+1을 허용한 다음 대기열의 모든 요소가 한 위치씩 앞으로 이동하도록 합니다. (즉, 큐의 테일 위치는 신규 사용자에게 부여됩니다.) 그런 다음 데이터 객체가 생성되어 큐의 테일 +1 위치에 삽입됩니다. 이번에 성공적으로 팀에 합류했습니다!

3. Dequeue: 큐가 비어 있는지 확인합니다(front==rear). 비어 있으면 프롬프트됩니다. 비어 있지 않으면 front-1(한 위치 뒤로 이동) ), 대기열이 성공적으로 제거됩니다!

<?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("A");
$q->InQ(&#39;B&#39;);
$q->InQ(&#39;游泳&#39;);
$q->InQ(&#39;C&#39;);
$q->OutQ();
$q->InQ("D");
$q->OutQ();
$q->OutQ();
$q->OutQ();
$q->OutQ();

관련 권장 사항:

PHP는 양방향 대기열을 구현합니다

위 내용은 PHP 대기열 알고리즘을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.