이중 연결 리스트 클래스: SplDoublyLinkedList
push: 노드 끝에 노드 삽입 연결리스트
pop: 연결된 목록에서 꼬리 노드를 가져오고 연결된 목록에서 이 노드를 삭제해도 현재 포인터의 위치는 변경되지 않습니다.
unshift: 연결 리스트의 선두에 노드를 삽입합니다
Shift: 연결리스트 헤드 노드 삭제
rewind: 연결리스트의 현재 포인터가 연결리스트의 헤드(즉, 하단)를 가리키도록 한다
current: 연결된 목록의 현재 노드 포인터가 가리키는 요소를 가져옵니다. 호출하기 전에 Rewind를 호출해야 합니다. 가리키는 노드가 삭제되면 빈 노드를 가리킵니다
next: 연결된 리스트의 현재 포인터가 다음 노드를 가리키도록 하고 current의 반환 값은 그에 따라 변경됩니다.
하단: 연결 리스트의 헤드 요소를 가져옵니다. 현재 포인터 위치는 변경되지 않습니다.
top: 연결된 리스트의 tail 요소를 가져옵니다. 현재 포인터 위치는 변경되지 않습니다.
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>