>백엔드 개발 >PHP 튜토리얼 >PHP 표준 라이브러리 spl 연결 목록, 스택, 큐

PHP 표준 라이브러리 spl 연결 목록, 스택, 큐

WBOY
WBOY원래의
2016-08-08 09:18:591400검색

이중 연결 리스트 클래스: SplDoublyLinkedList

1. 노드 추가 및 삭제 방법

push: 노드 끝에 노드 삽입 연결리스트
pop: 연결된 목록에서 꼬리 노드를 가져오고 연결된 목록에서 이 노드를 삭제해도 현재 포인터의 위치는 변경되지 않습니다.
unshift: 연결 리스트의 선두에 노드를 삽입합니다
Shift: 연결리스트 헤드 노드 삭제

2. 포인터 연산 방법

rewind: 연결리스트의 현재 포인터가 연결리스트의 헤드(즉, 하단)를 가리키도록 한다
current: 연결된 목록의 현재 노드 포인터가 가리키는 요소를 가져옵니다. 호출하기 전에 Rewind를 호출해야 합니다. 가리키는 노드가 삭제되면 빈 노드를 가리킵니다
next: 연결된 리스트의 현재 포인터가 다음 노드를 가리키도록 하고 current의 반환 값은 그에 따라 변경됩니다.
하단: 연결 리스트의 헤드 요소를 가져옵니다. 현재 포인터 위치는 변경되지 않습니다.
top: 연결된 리스트의 tail 요소를 가져옵니다. 현재 포인터 위치는 변경되지 않습니다.

3. 기타 방법(사용법은 스택 클래스 참조)

valid: 여전히 노드가 있는지 확인합니다. 연결된 목록, 출력을 반복할 때 사용할 수 있습니다. 판단하세요
count: 연결 리스트의 노드 수를 셉니다
key: 현재 노드의 키 값을 반환합니다
offsetSet: 지정된 키의 값을 설정합니다. 참고: 키가 0인 경우 0은 연결된 목록의 맨 위 또는 맨 아래를 가리키고 스택의 맨 위를 가리킵니다.
offunset: 지정된 키의 값 등록 해제

<code><span><?</span>php
<span>/**
 * Created by 马廷广
 * User: 马廷广
 * Date: 2015/8/5
 * Time: 10:52
 */</span><span>$obj</span><span>=</span><span>new</span> SplDoublyLinkedList();
<span>$obj</span><span>-></span>push(<span>'b'</span>);
<span>$obj</span><span>-></span>push(<span>'c'</span>);
<span>$obj</span><span>-></span>unshift(<span>'a'</span>);
var_dump(<span>$obj</span>);
<span>/*   array(3) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
    [2]=>
    string(1) "c"
  }
)
*/</span><span>$obj</span><span>-></span>rewind();
var_dump(<span>$obj</span><span>-></span>current());<span>//string(1) "a"</span><span>$obj</span><span>-></span>next();
var_dump(<span>$obj</span><span>-></span>current());<span>//string(1) "a"</span>
var_dump(<span>$obj</span><span>-></span>bottom());<span>//string(1) "a"</span>
var_dump(<span>$obj</span><span>-></span>top());<span>//string(1) "c"</span>
var_dump(<span>$obj</span><span>-></span>pop());<span>//string(1) "c"</span>
var_dump(<span>$obj</span>);
<span>/*
*  array(2) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
  }
*/</span>
var_dump(<span>$obj</span><span>-></span>shift());<span>//string(1) "a"</span>
var_dump(<span>$obj</span>);
<span>/*
* array(1) {
    [0]=>
    string(1) "b"
  }
*/</span></code>

Stack 클래스: SplDoublyLinkedList 클래스에서 상속된 SplStack 클래스

원리: 스택 클래스의 하위 레이어는 스택으로 구현되며, 스택은 고급 후처리입니다. 따라서 SplDoublyLinkedList 클래스에서 상속된 SplStack 클래스의 일부 메서드는 rewind 메서드와 같이 이해에 약간의 차이가 있습니다. spl이 rewind 메서드를 사용한 후 포인터는 스택의 상단을 가리킵니다. 그림에서 Push 및 Pop은 스택의 최상위 요소에서 작동하고, unshift 및 Shift는 스택의 최하위 요소에서 작동합니다.

<code><span><?</span>php
<span>/**
 * Created by 马廷广
 * User: 马廷广
 * Date: 2015/8/5
 * Time: 11:47
 */</span><span>$stack</span><span>=</span><span>new</span> SplStack();
<span>$stack</span><span>-></span>push(<span>'a'</span>);
<span>$stack</span><span>-></span>push(<span>'b'</span>);
<span>$stack</span><span>-></span>push(<span>'c'</span>);
echo <span>$stack</span><span>-></span>count();<span>//3</span><span>$stack</span><span>-></span>rewind();
echo <span>$stack</span><span>-></span>current();<span>//c</span><span>$stack</span><span>-></span>offsetSet(<span>0</span>,<span>'d'</span>);<span>//offsetSet中0指向的是图中的栈顶,由栈顶向下递增1,2,3,4</span><span>while</span>(<span>$stack</span><span>-></span>valid()){
    echo <span>$stack</span><span>-></span>key()<span>.</span><span>"->"</span><span>.</span><span>$stack</span><span>-></span>current();
    <span>$stack</span><span>-></span>next();
}
<span>/*2->d
1->b
0->a
*/</span></code>

대기열 클래스: SplDoublyLinkedList 클래스

enqueue: 대기열에 들어가세요

dequeue: 대기열을 종료합니다
큐 클래스의 rewind, offsetSet 및 기타 메소드는 연결 목록

<code><?php
/**
 * Created <span>by</span> 马廷广
 * <span>User</span>: 马廷广
 * <span>Date</span>: <span>2015</span>/<span>8</span>/<span>5</span>
 * <span>Time</span>: <span>12</span>:<span>36</span>
 */

$obj = <span>new</span> SplQueue();
$obj->enqueue(<span>'a'</span>);
$obj->enqueue(<span>'b'</span>);
$obj->enqueue(<span>'c'</span>);
var_dump($obj);
/*    [<span>0</span>]<span>=></span>
    string(<span>1</span>) <span>"a"</span>
    [<span>1</span>]<span>=></span>
    string(<span>1</span>) <span>"b"</span>
    [<span>2</span>]<span>=></span>
    string(<span>1</span>) <span>"c"</span>
  }
*/
$obj->unshift(<span>"d"</span>);
$obj->push(<span>'e'</span>);
var_dump($obj);
/*
*  array(<span>5</span>) {
    [<span>0</span>]<span>=></span>
    string(<span>1</span>) <span>"d"</span>
    [<span>1</span>]<span>=></span>
    string(<span>1</span>) <span>"a"</span>
    [<span>2</span>]<span>=></span>
    string(<span>1</span>) <span>"b"</span>
    [<span>3</span>]<span>=></span>
    string(<span>1</span>) <span>"c"</span>
    [<span>4</span>]<span>=></span>
    string(<span>1</span>) <span>"e"</span>
  }
*/
$obj->rewind();
echo $obj->current();<span>//</span>d
$obj->offsetSet(<span>0</span>,<span>'h'</span>);
var_dump($obj);
/*
* array(<span>5</span>) {
    [<span>0</span>]<span>=></span>
    string(<span>1</span>) <span>"h"</span>
    [<span>1</span>]<span>=></span>
    string(<span>1</span>) <span>"a"</span>
    [<span>2</span>]<span>=></span>
    string(<span>1</span>) <span>"b"</span>
    [<span>3</span>]<span>=></span>
    string(<span>1</span>) <span>"c"</span>
    [<span>4</span>]<span>=></span>
    string(<span>1</span>) <span>"e"</span>
  }
*/</code>
과 유사합니다. 저작권 설명: 이 기사는 블로거의 원본 기사이므로 없이 복제할 수 없습니다. 블로거의 허락을 받았습니다.

위 내용은 PHP 표준 라이브러리 spl의 링크드 리스트, 스택, 큐에 대한 내용을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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