이 글에서는 PHP 데이터 구조의 기본이 되는 이중 연결 리스트를 중심으로 소개하고 있으며, 이는 특정 참조 값을 가지고 있습니다. 이제 도움이 필요한 친구들이 참고할 수 있습니다.
실용적인 PHP 데이터 구조의 기본에 대한 이전 기사 - 단일 연결 목록
단일 연결 목록은 하나씩 노드인 개체로 구성됩니다. 다음 노드의 포인터, 마지막 노드의 포인터 필드는 null을 가리킵니다. 각 노드는 모든 데이터 유형을 저장할 수 있습니다.
이중 연결 리스트의 각 노드에는 각각 선행 노드와 후속 노드를 가리키는 두 개의 포인터 필드가 있습니다. 단일 연결 리스트는 단방향, 이중 연결 리스트는 양방향입니다.
이중 연결 목록에 대한 일반적인 작업은 다음과 같습니다.
insert
# 🎜🎜#class ListNode { public $data = null; public $next = null; public $prev = null; public function __construct(string $data) { $this->data = $data; } }링크드 리스트 클래스를 보면 먼저 3개의 프라이빗 속성, 즉 헤드 노드, 테일 노드, 길이가 필요합니다.
class DoubleLinkedList { private $head = null; private $last = null; private $length = 0; }
/** * 插入一个节点 * @param string|null $data * @return bool * complexity O(n) */ public function insert(string $data = null) { $newNode = new ListNode($data); if ($this->head) { $currentNode = $this->head; while ($currentNode) { if ($currentNode->next === null) { $currentNode->next = $newNode; $newNode->prev = $currentNode; $this->last = $newNode; $this->length++; return true; } $currentNode = $currentNode->next; } } else { $this->head = &$newNode; $this->last = $newNode; $this->length++; return true; } }노드 삭제 방법을 살펴보겠습니다.
/** * 删除一个节点 * @param string $data * @return bool|ListNode * complexity O(n) */ public function delete(string $query = null) { if ($this->head) { $currentNode = $this->head; $prevNode = null; while ($currentNode) { if ($currentNode->data === $query) { if ($nextNode = $currentNode->next) { if ($prevNode) { $prevNode->next = $nextNode; $nextNode->prev = $prevNode; } else { $this->head = $nextNode; $nextNode->prev = null; } unset($currentNode); } else { if ($prevNode) { $this->last = $prevNode; $prevNode->next = null; unset($currentNode); } else { $this->head = null; $this->last = null; } } $this->length--; return true; } $prevNode = $currentNode; $currentNode = $currentNode->next; } } return false; }
public function reverse() { if ($this->head !== null) { if ($this->head->next !== null) { $reversedList = null; $currentNode = $this->head; while ($currentNode !== null) { $next = $currentNode->next; $currentNode->next = $reversedList; $currentNode->prev = $next; $reversedList = $currentNode; $currentNode = $next; } $this->last = $this->head; $this->head = $reversedList; } } }이중 연결 목록의 다른 작업에 대한 자세한 구현은 여기를 참조하세요.
PHP 데이터 구조 기본 스택
php7+ 참고 php-fpm 매개변수 구성위 내용은 PHP 데이터 구조 기본: 이중 연결 리스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!