목차
php实现的双向队列类实例,php队列实例
用PHP实现一个双向队列
想用php写一个队列的类与一个堆栈的类 ,类里面包含两个方法,把数值放进去与把数值取出来
php教程 php手册 php实现的双向队列类实例,php队列实例

php实现的双向队列类实例,php队列实例

Jun 13, 2016 am 09:24 AM
php 스택 친절한 대기줄

php实现的双向队列类实例,php队列实例

本文实例讲述了php实现的双向队列类及其用法,对于PHP数据结构与算法的学习有不错的参考价值。分享给大家供大家参考。具体分析如下:

(deque,全名double-ended queue)是一种具有队列和栈的性质的数据结构。双向队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。

在实际使用中,还可以有输出受限的双向队列(即一个端点允许插入和删除,另一个端点只允许插入的双向队列)和输入受限的双向队列(即一个端点允许插入和删除,另一个端点只允许删除的双向队列)。而如果限定双向队列从某个端点插入的元素只能从该端点删除,则该双向队列就蜕变为两个栈底相邻的栈了。

DEQue.class.php类文件如下:

<&#63;php 
/** php 双向队列。支持限定队列长度,输入受限,输出受限,及输出必须与输入同端几种设置 
*  Date:  2014-04-30 
*  Author: fdipzone 
*  Ver:  1.0 
* 
*  Func: 
*  public frontAdd   前端入列 
*  public frontRemove 前端出列 
*  public rearAdd   后端入列 
*  pulbic rearRemove  后端出列 
*  public clear    清空对列 
*  public isFull    判断对列是否已满 
*  private getLength  获取对列长度 
*  private setAddNum  记录入列,输出依赖输入时调用 
*  private setRemoveNum 记录出列,输出依赖输入时调用 
*  private checkRemove 检查是否输出依赖输入 
*/ 
 
class DEQue{ // class start 
 
  private $_queue = array(); // 对列 
  private $_maxLength = 0;  // 对列最大长度,0表示不限 
  private $_type = 0;    // 对列类型 
  private $_frontNum = 0;  // 前端插入的数量 
  private $_rearNum = 0;   // 后端插入的数量 
 
 
  /** 初始化 
  * @param $type    对列类型 
  *          1:两端均可输入输出 
  *          2:前端只能输入,后端可输入输出 
  *          3:前端只能输出,后端可输入输出 
  *          4:后端只能输入,前端可输入输出 
  *          5:后端只能输出,前端可输入输出 
  *          6:两端均可输入输出,在哪端输入只能从哪端输出 
  * @param $maxlength 对列最大长度 
  */ 
  public function __construct($type=1, $maxlength=0){ 
    $this->_type = in_array($type, array(1,2,3,4,5,6))&#63; $type : 1; 
    $this->_maxLength = intval($maxlength); 
  } 
 
 
  /** 前端入列 
  * @param Mixed  $data 数据 
  * @return boolean 
  */ 
  public function frontAdd($data=null){ 
 
    if($this->_type==3){ // 前端输入限制 
      return false; 
    } 
 
    if(isset($data) && !$this->isFull()){ 
 
      array_unshift($this->_queue, $data); 
 
      $this->setAddNum(1); 
 
      return true; 
    } 
    return false; 
  } 
 
  /** 前端出列 
  * @return Array 
  */ 
  public function frontRemove(){ 
 
    if($this->_type==2){ // 前端输出限制 
      return null; 
    } 
 
    if(!$this->checkRemove(1)){ // 检查是否依赖输入 
      return null; 
    } 
 
    $data = null; 
 
    if($this->getLength()>0){ 
 
      $data = array_shift($this->_queue); 
 
      $this->setRemoveNum(1); 
    } 
    return $data; 
  } 
 
  /** 后端入列 
  * @param Mixed  $data 数据 
  * @return boolean 
  */ 
  public function rearAdd($data=null){ 
 
    if($this->_type==5){ // 后端输入限制 
      return false; 
    } 
 
    if(isset($data) && !$this->isFull()){ 
 
      array_push($this->_queue, $data); 
 
      $this->setAddNum(2); 
 
      return true; 
    } 
    return false; 
  } 
 
  /** 后端出列 
  * @return Array 
  */ 
  public function rearRemove(){ 
 
    if($this->_type==4){ // 后端输出限制 
      return null; 
    } 
 
    if(!$this->checkRemove(2)){ // 检查是否依赖输入 
      return null; 
    } 
 
    $data = null; 
 
    if($this->getLength()>0){ 
 
      $data = array_pop($this->_queue); 
 
      $this->setRemoveNum(2); 
    } 
    return $data; 
  } 
 
  /** 清空对列 
  * @return boolean 
  */ 
  public function clear(){ 
    $this->_queue = array(); 
    $this->_frontNum = 0; 
    $this->_rearNum = 0; 
    return true; 
  } 
 
  /** 判断对列是否已满 
  * @return boolean 
  */ 
  public function isFull(){ 
    $bIsFull = false; 
    if($this->_maxLength!=0 && $this->_maxLength==$this->getLength()){ 
      $bIsFull = true; 
    } 
    return $bIsFull; 
  } 
 
  /** 获取当前对列长度 
  * @return int 
  */ 
  private function getLength(){ 
    return count($this->_queue); 
  } 
 
  /** 记录入列,输出依赖输入时调用 
  * @param int $endpoint 端点 1:front 2:rear 
  */ 
  private function setAddNum($endpoint){ 
    if($this->_type==6){ 
      if($endpoint==1){ 
        $this->_frontNum ++; 
      }else{ 
        $this->_rearNum ++; 
      } 
    } 
  } 
 
  /** 记录出列,输出依赖输入时调用 
  * @param int $endpoint 端点 1:front 2:rear 
  */ 
  private function setRemoveNum($endpoint){ 
    if($this->_type==6){ 
      if($endpoint==1){ 
        $this->_frontNum --; 
      }else{ 
        $this->_rearNum --; 
      } 
    } 
  } 
 
  /** 检查是否输出依赖输入 
  * @param int $endpoint 端点 1:front 2:rear 
  */ 
  private function checkRemove($endpoint){ 
    if($this->_type==6){ 
      if($endpoint==1){ 
        return $this->_frontNum>0; 
      }else{ 
        return $this->_rearNum>0; 
      } 
    } 
    return true; 
  } 
} // class end 
&#63;> 

demo.php示例代码如下:

<&#63;php 
 
require "DEQue.class.php"; 
 
// 例子1 
 
$obj = new DEQue(); // 前后端都可以输入,无限长度 
 
$obj->frontAdd('a'); // 前端入列 
$obj->rearAdd('b'); // 后端入列 
$obj->frontAdd('c'); // 前端入列 
$obj->rearAdd('d'); // 后端入列 
 
// 入列后数组应为 cabd 
 
$result = array(); 
 
$result[] = $obj->rearRemove(); // 后端出列 
$result[] = $obj->rearRemove(); // 后端出列 
$result[] = $obj->frontRemove(); // 前端出列 
$result[] = $obj->frontRemove(); // 前端出列 
 
print_r($result); // 出列顺序应为 dbca 
 
// 例子2 
$obj = new DEQue(3, 5); // 前端只能输出,后端可输入输出,最大长度5 
 
$insert = array(); 
$insert[] = $obj->rearAdd('a'); 
$insert[] = $obj->rearAdd('b'); 
$insert[] = $obj->frontAdd('c'); // 因前端只能输出,因此这里会返回false 
$insert[] = $obj->rearAdd('d'); 
$insert[] = $obj->rearAdd('e'); 
$insert[] = $obj->rearAdd('f'); 
$insert[] = $obj->rearAdd('g'); // 超过长度,返回false 
 
var_dump($insert); 
 
// 例子3 
$obj = new DEQue(6); // 输出依赖输入 
 
$obj->frontAdd('a'); 
$obj->frontAdd('b'); 
$obj->frontAdd('c'); 
$obj->rearAdd('d'); 
 
$result = array(); 
$result[] = $obj->rearRemove(); 
$result[] = $obj->rearRemove(); // 因为输出依赖输入,这个会返回NULL 
$result[] = $obj->frontRemove(); 
$result[] = $obj->frontRemove(); 
$result[] = $obj->frontRemove(); 
 
var_dump($result); 
 
&#63;> 

完整实例代码点击此处本站下载。

希望本文所述对大家PHP程序算法设计的学习有所帮助。

用PHP实现一个双向队列

问题不明
 

想用php写一个队列的类与一个堆栈的类 ,类里面包含两个方法,把数值放进去与把数值取出来

class queue{
private $q = array();
public function push($v){
array_push($this -> q, $v);

}
public function shift(){
return shift($this -> q);

}

}

最简单的队列.
不过,用PHP来实现数据结构,不感觉有点吃撑了么?
 

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

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제

PHP 튜토리얼
1545
276
PHP의 객체 관계 매핑 (ORM) 성능 튜닝 PHP의 객체 관계 매핑 (ORM) 성능 튜닝 Jul 29, 2025 am 05:00 AM

N 1 쿼리 문제를 피하고 관련 데이터를 미리로드하여 데이터베이스 쿼리 수를 줄입니다. 2. 메모리와 대역폭을 저장하기 위해 완전한 엔티티를로드하지 않도록 필요한 필드 만 선택하십시오. 3. 교리의 2 차 캐시 또는 Redis 캐시 고주파 쿼리 결과와 같은 캐시 전략을 합리적으로 사용하십시오. 4. 엔티티 수명주기를 최적화하고 정기적으로 Clear ()을 호출하여 메모리를 자유롭게하여 메모리 오버플로를 방지합니다. 5. 데이터베이스 색인이 존재하는지 확인하고 비효율적 인 쿼리를 피하기 위해 생성 된 SQL 문을 분석하십시오. 6. 변경 사항이 필요하지 않은 시나리오에서 자동 변경 추적을 비활성화하고 배열 또는 경량 모드를 사용하여 성능을 향상시킵니다. ORM을 올바르게 사용하려면 개발 효율을 유지하면서 응용 프로그램 성능을 보장하기 위해 SQL 모니터링, 캐싱, 배치 처리 및 적절한 최적화를 결합해야합니다.

vscode settings.json 위치 vscode settings.json 위치 Aug 01, 2025 am 06:12 AM

settings.json 파일은 사용자 수준 또는 작업 공간 수준 경로에 있으며 VSCODE 설정을 사용자 정의하는 데 사용됩니다. 1. 사용자 수준 경로 : Windows는 C : \ Users \\ AppData \ Roaming \ Code \ User \ Settings.json, MacOS IS /users//library/applicationsupport/code/user/settings.json, linux는 /home//.config/code/user/settings.json; 2. Workspace 수준 경로 : .vscode/settings project root 디렉토리

Readonly 속성으로 PHP에 불변의 물체를 구축합니다 Readonly 속성으로 PHP에 불변의 물체를 구축합니다 Jul 30, 2025 am 05:40 AM

readOnlyPropertiesInphp8.2CanonlyBeassignedOnedOneDonceIntheConstructorAratDeclarationandCannotBemodififificificificifified

CSS 다크 모드 전환 예 CSS 다크 모드 전환 예 Jul 30, 2025 am 05:28 AM

먼저 JavaScript를 사용하여 사용자 시스템 환경 설정과 로컬로 저장된 테마 설정을 얻고 페이지 테마를 초기화하십시오. 1. HTML 구조에는 주제 스위칭을 트리거하는 버튼이 포함되어 있습니다. 2. CSS 사용 : 루트는 밝은 테마 변수를 정의하기 위해 루트, .dark-mode 클래스는 어두운 테마 변수를 정의하고 var ()를 통해 이러한 변수를 적용합니다. 3. JavaScript는 색채를 선호하는 것을 감지하고 초기 테마를 결정하기 위해 LocalStorage를 읽습니다. 4. 버튼을 클릭 할 때 HTML 요소에서 Dark-Mode 클래스를 전환하고 현재 상태를 LocalStorage에 저장합니다. 5. 모든 색상 변경 사항은 0.3 초 전환 애니메이션을 동반하여 사용자를 향상시킵니다.

예제 HTTP 미들웨어 로깅 예제로 이동하십시오 예제 HTTP 미들웨어 로깅 예제로 이동하십시오 Aug 03, 2025 am 11:35 AM

GO의 HTTP 로그 미들웨어는 요청 방법, 경로, 클라이언트 IP 및 시간 소모를 기록 할 수 있습니다. 1. http.handlerfunc를 사용하여 프로세서를 랩핑하고, 2. 다음에 전화하기 전후 시작 시간과 종료 시간을 기록하십시오. 전체 샘플 코드는 실행중인 것으로 확인되었으며 중소형 프로젝트를 시작하는 데 적합합니다. 확장 제안에는 상태 코드 캡처, JSON 로그 지원 및 요청 ID 추적이 포함됩니다.

Edge PDF 뷰어가 작동하지 않습니다 Edge PDF 뷰어가 작동하지 않습니다 Aug 07, 2025 pm 04:36 PM

TestHepdFinanotherAppTodeMineifTheissueiswithTheFileoredge.2

Java 성능 최적화 및 프로파일 링 기술 Java 성능 최적화 및 프로파일 링 기술 Jul 31, 2025 am 03:58 AM

성능 분석 도구를 사용하여 병목 현상을 찾고 개발 및 테스트 단계에서 VisualVM 또는 JProfiler를 사용하며 생산 환경에서 Async-Profiler에 우선 순위를 부여합니다. 2. 객체 생성을 줄이고, 개체를 재사용하고, StringBuilder를 사용하여 문자열 스 플라이 싱을 교체하고, 적절한 GC 전략을 선택하십시오. 3. 장면에 따라 수집 사용을 최적화하고 초기 용량을 선택하고 사전 설정합니다. 4. 동시성 최적화, 동시 컬렉션을 사용하고, 잠금 세분화를 줄이고, 스레드 풀을 합리적으로 설정하십시오. 5. JVM 매개 변수 조정, 합리적인 힙 크기 및 저도 가비지 수집기를 설정하고 GC 로그를 활성화합니다. 6. 코드 레벨에서 반사를 피하고, 래퍼 클래스를 기본 유형으로 바꾸고, 초기화를 지연시키고, 최종 및 정적을 사용하십시오. 7. JMH와 결합 된 지속적인 성능 테스트 및 모니터링

데이터 스크래핑 및 웹 자동화에 PHP 사용 데이터 스크래핑 및 웹 자동화에 PHP 사용 Aug 01, 2025 am 07:45 AM

ustuzzleforrobusthtttprequestswithHeadSandtimeouts.2.parsehtMleffiallywithSymfonyDomcraWlerusingcsSelectors.3. handlejavaScript-heaVysitesByIntegratingPuppetErgateErgateEcpExec () TorenderPages.4.Resptobots.txt, AddDelays, andUsepoTecpexec () TorenderPages

See all articles