PHP 대기 열의 실현 을 자세히 설명 합 니 다.

대기 열 은 특수 한 선형 표 로 표 의 전단 에 만 허용 되 며 front 라 고 부 르 며 삭제 작업 을 할 수 있 습 니 다.표 의 백 엔 드 에 서 는 rear 라 고 불 러 삽입 작업 을 할 수 있 습 니 다.대기 열 은 스 택 과 마찬가지 로 조작 이 제 한 된 선형 표 로 스 택 과 다른 점 은 대기 열 은'선진 선 출'원칙 을 따 르 고 스 택 은'선진 후 출'원칙 을 따른다 는 것 이다.대기 열 에 삽입 작업 을 하 는 끝 을 팀 꼬리 라 고 하고 삭제 작업 을 하 는 것 을 팀 머리 라 고 하 며 팀 꼬리 에 만 삽입 작업 을 하고 팀 머리 에서 삭제 작업 을 할 수 있 습 니 다.
대기 열의 데이터 요 소 는 대기 열 요소 라 고도 부 릅 니 다.대기 열 끝 에 하나의 요 소 를 삽입 하 는 것 을 입 대 라 고 합 니 다.대기 열 에서 하나의 요 소 를 삭제 하 는 것 을 출 대 라 고 합 니 다.참고 코드 구현:

<?php
/**
* php    
* 
* Create On 2010-6-4
* Author Been
* QQ:281443751
* Email:[email protected]
**/
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();
본 사례 에는 두 가지 유형 이 있다.
첫 번 째 는 data 류 로 데이터 의 저장 과 대기 열 요소 의 입대 상황 을 실현 하 는 데 사 용 됩 니 다.
두 번 째 는 queue 류 로 대기 열 요소 의 일부 입 대 를 위 한 작업 입 니 다.
대기 열 에 네 개의 속성 이 포함 되 어 있 습 니 다:
front(대열 의 머리)
rear(대기 열의 끝 부분)
maxsize(대기 열 길이,즉 대기 열 요소 개수)
queue(입 대 된 대기 열 요 소 를 모두 저장 하 는 대상)
필드 설명:
1.대기 열 을 초기 화 할 때 하나의 대기 열 을 생 성 합 니 다.하나의 매개 변 수 를 maxsize 초기 화 대기 열 로 입력 하여 팀 의 꼬리 rear 를 0 으로 설정 합 니 다.팀 의 머리 front 도 0 으로 설정 합 니 다.이때 quue 에는 0 번 요소 만 있 고 rear 와 front 가 모두 가리 키 고 있 습 니 다.
2.파티 에 들 어 갈 때 대기 열 이 가득 찼 는 지(front-rear==maxsize)를 판단 해 야 합 니 다.가득 차 면 삽입 할 수 없고,가득 차 지 않 으 면 삽입 할 수 있 습 니 다.삽입 할 때 front 는 스스로 증가 한 다음 에 대열 의 모든 요 소 를 한 자리 앞으로 이동 시 킨 다음 에 새로운 data 대상 을 생 성하 여 팀 의 끝 위치 에 삽입 합 니 다.
3.팀 을 나 갈 때 대기 열 이 비어 있 는 지(front==rear)판단 하고,비어 있 을 때 는 팀 을 나 갈 수 없습니다.비어 있 지 않 으 면 front 가 가리 키 는 대상 을 삭제 하고 front 를 자감 하여 팀 을 완성 합 니 다.
실행 결 과 는 다음 과 같 습 니 다.
샤 오 먀 오:형 들 어 왔 다!
입단 에 성공 하 다
마 수:형 들 어 왔 다!
입단 에 성공 하 다
스 케 이 트:형 들 어 왔 다!
입단 에 성공 하 다
장 세가:내 가 오 자마자 왜 꽉 찼 지?팀 이 꽉 차 서 입 대 를 할 수 없습니다.기다 리 세 요!)
샤 오 먀 오:형 간다!
팀 성공!
주서 효:형 들 어 왔 다!
입단 에 성공 하 다
마 수:형 간다!
팀 성공!
스 케 이 트:형 간다!
팀 성공!
주 서 효:형 간다!
팀 성공!
팀 이 비 면 팀 을 나 갈 수 없다!
팀 이 비 면 팀 을 나 갈 수 없다!
 위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 PHP 대기 열의 상세 한 통합 입 니 다.여러분 께 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기