Outubro 26th 2007 03:22 am
Utilizando listas encadeadas
Definição da interface
PHP:
-
<?php
-
-
interface IList {
-
-
public function getCount();
-
public function isEmpty();
-
public function clear();
-
public function getFirst();
-
public function getLast();
-
public function insertFirst($item);
-
public function insertLast($item);
-
public function removeFirst();
-
public function removeLast();
-
public function get($index);
-
public function set($index, $item);
-
public function remove($index);
-
public function contains($item);
-
public function removeItem($item);
-
-
}
Definição do Nodo
Está classe irá representar cada nodo da lista
PHP:
-
<?php
-
-
/**
-
* Classe que representa cada nodo da lista encadeada
-
*
-
*/
-
class Node {
-
-
/**
-
* armazena elemento que o node irá armazenar
-
*
-
* @var midex
-
*/
-
private $item;
-
-
/**
-
* armazena próximo nodo da lista
-
*
-
* @var Node
-
*/
-
private $nextNode;
-
-
/**
-
* construtor da classe
-
*
-
* @param mixed $item
-
* @param Node $nextNode
-
*/
-
public function __construct($item, Node $nextNode = null) {
-
$this->item = $item;
-
$this->nextNode = $nextNode;
-
}
-
-
/**
-
* seta o elemento a ser armazenado no nodo
-
*
-
* @param mixed $item
-
*/
-
public function setItem($item) {
-
$this->item = $item;
-
}
-
-
/**
-
* seta o próximo nodo da lista
-
*
-
* @param Node $nextNode
-
*/
-
public function setNext(Node $nextNode = null) {
-
$this->nextNode = $nextNode;
-
}
-
-
/**
-
* retorna o elemento armazenado no nodo
-
*
-
* @return mixed
-
*/
-
public function getItem() {
-
return $this->item;
-
}
-
-
/**
-
* retorna o próximo nodo da lista
-
*
-
* @return Node
-
*/
-
public function getNext() {
-
return $this->nextNode;
-
}
-
-
}
Implementação da lista
Primeiramente criamos a classe LinkedList definindo seus três atributos: $head, $tail e $count. Onde $head, irá armazenar o primeiro nodo da lista, $tail irá armazerar o último atributo da lista e $count irá armazenar a quantidade de itens na lista.
PHP:
-
<?php
-
-
require_once('Node.php');
-
require_once('IList.php');
-
require_once('NoSuchElementException.php');
-
-
/**
-
* Lista encadeada
-
*
-
*/
-
class LinkedList implements IList {
-
-
/**
-
* cabeça da lista
-
*
-
* @var Node
-
*/
-
private $head;
-
-
/**
-
* Calda da lista
-
*
-
* @var Node
-
*/
-
private $tail;
-
-
/**
-
* Contador de elementos da lista
-
*
-
* @var int
-
*/
-
private $count;
-
-
/**
-
* construtor da classe
-
*
-
* @return LinkedList
-
*/
-
public function __construct() {
-
$this->head = null;
-
$this->tail = null;
-
$this->count = 0;
-
}
-
}
Agora iremos criar os principais métodos que nossa lista terá.
3 Comments »














Fill on 12 Dez 2007 at 11:28 #
Eu já implementei isso em C na faculdade mas, sinceramente, nunca vi uma boa aplicação para isso. Voce teve de usar isso em php porque? Responde no meu e-mail por favor =)
Grato
Diego Tremper on 14 Dez 2007 at 02:26 #
Felipe,
de fato nunca utilizei uma lista encadeada em algum sistema em produção, mas pelo que sei, a vantagem de utilizar listas encadeadas está na inserção e remoção de elementos no meio da lista, sendo que não há a necessidade de mover os demais elementos da lista para esta ação.
Obs.: A idéia do blog é justamente difundir e expor opiniões sobre assuntos diversos, por isso respondi aqui sua pergunta. Espero que não se ofenda.
Abraço
Dil Okulu on 31 Mar 2008 at 07:00 #
hello everybody. my Portuguese is not good but it seems like a very nice web site. thanks