PHP pod względem rozwiązania braku wskaźników jest podobny do Javy ;) Czyli zmienne są referencją. Prosta implementacaj listy w PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | class Node { public $next; public $value; } class Lista { private $root; public function __construct($a){ $this->root=new Node(); $this->root->value=$a; $this->root->next=NULL; } public function add($a){ $r=$this->root; while($r->next!=NULL) { $r=$r->next; } $temp = new Node(); $temp->next=NULL; $temp->value=$a; $r->next=$temp; } public function show(){ $r=$this->root; while($r!=NULL){ echo $r->value.' '; $r=$r->next; } } } |
Oczywiście użycie to
1 2 3 4 5 | $t = new Lista(4); $t->add(6); $t->add("jj"); $t->add(19); $t->show(); |
Bardzo dużo rzeczy w PHP przechowywane jest w tablicach. Napiszmy jeszcze metodę która zwróci listę w postaci tablicy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public function as_array(){ $r=$this->root; $return = array(); $i=0; while($r!=NULL){ $return[$i]=$r->value; $r=$r->next; $i++; } return $return; } |
No i pobranie tablicy stworzonej z listy:
1 | $tablica = $t->s_array(); |
:)
Pozdrawiam!
Mateusz Mazurek
Wbudowane w PHP rozszerzenie SPL także pozwala na budowę takich rozwiązań. W Twoim kodzie podczas dodawania kolejnej pozycji na liście musisz przejść przez wszystkie pozostałe. Może to powodować spadek wydajności przy dużej ilości danych – może warto zrobić cache ostatniej wartości? . Próbowałeś to porównać pod kątem wydajności z najprostszymi implementacjami listy dostępnymi w SPL? Niepotrzebnie także jest przypisywane null do next w temp.