>백엔드 개발 >PHP 튜토리얼 >PHP 대기열이란 무엇입니까? 달성하는 방법? (코드 예)

PHP 대기열이란 무엇입니까? 달성하는 방법? (코드 예)

青灯夜游
青灯夜游앞으로
2018-11-22 14:07:082724검색

이 글의 내용은 PHP 큐란 무엇인지 소개하는 것입니다. 달성하는 방법? (코드 예). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

큐는 테이블의 프런트 엔드(프론트라고 함)에서만 삭제 작업과 리어라고 할 수 있는 테이블의 백 엔드에서만 삽입 작업을 허용하는 특수 선형 테이블입니다.

스택과 마찬가지로 큐는 작업이 제한된 선형 목록입니다. 스택과의 차이점은 큐는 "선입 선출" 원칙을 따르는 반면, 스택은 "선입 선출" 원칙을 따른다는 것입니다. .

삽입 작업이 수행되는 큐의 끝을 큐의 테일(tail)이라고 하며 삭제 작업이 수행되는 끝을 큐 헤드라고 합니다. 큐의 끝에서는 삽입 작업만 허용되며 삭제가 가능합니다. 작업은 대기열의 헤드에서 허용됩니다.

큐의 데이터 요소를 큐 요소라고도 합니다. 큐의 끝에 요소를 삽입하는 것을 큐에 넣기라고 하며, 큐의 선두에 있는 요소를 삭제하는 것을 큐에서 빼기라고 합니다.

특정 구현 참조 코드:

<?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('0'=>'队尾');//存储队列
    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 '入队成功!<br>';
        }
    }
    //出队
    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('马帅');
$q->InQ('溜冰');
$q->InQ('张世佳');
$q->OutQ();
$q->InQ("周瑞晓");
$q->OutQ();
$q->OutQ();
$q->OutQ();
$q->OutQ();

이 경우에는 두 가지 클래스가 있습니다.

 첫 번째는 데이터 저장과 대기열 요소의 시작 및 종료를 구현하는 데 사용되는 데이터 클래스입니다. 큐 요소의 큐 추가 및 큐 제거 작업에 사용되는 클래스입니다.

대기열에는 4가지 속성이 포함됩니다.

front(대기열의 선두)

후면(대기열의 꼬리)

maxsize(대기열의 길이, 즉 대기열 요소 수)

대기열 (큐에 추가된 모든 큐 저장) 요소 객체)

장면 설명:

1. 큐 초기화 시 큐를 생성하고, 매개변수를 maxsize로 전달하고, 큐를 초기화하고, 큐의 뒤쪽을 설정합니다. 0으로 설정하고 큐의 앞부분을 0으로 설정합니다. 이때 Element 0만 있고 Rear와 Front가 모두 이를 가리킵니다.

2. 큐에 참가할 때 먼저 큐가 가득 찼는지 확인해야 합니다(앞-뒤 == 최대 크기). 가득 차면 삽입이 허용되지 않습니다. 삽입 시 앞쪽이 증가되고 대기열의 모든 요소가 한 위치만큼 앞으로 이동한 다음(새 요소를 삽입하기 위해 대기열의 꼬리 위치를 그대로 유지) 새 데이터 객체가 생성되어 대기열의 꼬리 위치에 삽입됩니다. 대기줄.

3. 대기열에서 제거할 때 대기열이 비어 있는지 확인합니다(앞 == 뒤쪽). 비어 있으면 대기열에서 제거할 수 없습니다. 비어 있지 않으면 앞이 가리키는 객체를 삭제하고 앞부분을 줄여서 큐 제거를 완료합니다.

실행 결과는 다음과 같습니다.

PHP 대기열이란 무엇입니까? 달성하는 방법? (코드 예)요약: 위 내용은 이 글의 전체 내용이므로, 모든 분들의 공부에 도움이 되었으면 좋겠습니다. 더 많은 관련 비디오 튜토리얼 추천:

PHP 튜토리얼

!

위 내용은 PHP 대기열이란 무엇입니까? 달성하는 방법? (코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제