> 백엔드 개발 > PHP 문제 > PHP에서 대기열을 구현하는 방법

PHP에서 대기열을 구현하는 방법

藏色散人
풀어 주다: 2023-02-28 14:02:01
원래의
4022명이 탐색했습니다.

PHP에서 대기열을 구현하는 방법

PHP에서 대기열을 구현하는 방법은 무엇인가요?

이 대기열 알고리즘에는 두 가지 클래스가 있습니다.

첫 번째 클래스는 데이터를 저장하는 데이터 클래스입니다.

두 번째는 큐 클래스입니다. 이것은 큐의 일부 작업입니다. 큐를 떠날 때 나가야 합니다.

후면(큐의 꼬리는 항상 0을 가리킵니다. 여기)

대기열(대기 중인 모든 데이터 개체를 저장하며 기본적으로 대기열에 하나가 있습니다. 요소가 비어 있으면 앞과 뒤 모두 이를 가리킵니다.)

maxsize( 큐의 길이)

응용 프로그램 지침:

1 큐 초기화: 큐 생성 매개변수를 maxsize로 전달하여 큐를 초기화하고, Rear를 0으로 설정하고, front를 0으로 설정합니다. 현재 큐에는 요소 0만 있으며, Rear와 Front는

2를 가리킵니다. Enqueue: 큐가 가득 찼는지 확인합니다(front-rear==maxsize). ), 꽉 차 있으면 메시지가 표시됩니다. 먼저 front + 1을 지정한 다음 대기열의 모든 요소를 ​​한 위치 앞으로 이동합니다(즉, 대기열의 꼬리 위치를 새 도착으로 포기합니다). ), 생성된 데이터 객체는 큐의 끝 위치 +1에 삽입됩니다. 이번에 성공적으로 팀에 합류했습니다!

3. 큐 제거: 큐가 비어 있는지 확인합니다(앞==뒤). 비어 있으면 앞쪽이 가리키는 개체를 삭제합니다. 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("小苗");
$q->InQ(&#39;马帅&#39;);
$q->InQ(&#39;溜冰&#39;);
$q->InQ(&#39;张世佳&#39;);
$q->OutQ();
$q->InQ("周瑞晓");
$q->OutQ();
$q->OutQ();
$q->OutQ();
$q->OutQ();
로그인 후 복사

실행 결과:

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

위 내용은 PHP에서 대기열을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿