Nadesłany przez Marek Rynarzewski, 04 sierpnia 2012 20:55
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
lista.php:
<?php //Implementacja listy z wartownikiem //Marek Rynarzewski //www.algorytm.org //Wartownik class Wartownik { //poprzednik public $prev; //nastepnik public $next; //Utworz wartownika public function __construct() { $this->prev = $this; $this->next = $this; } } //Element to wartownik rozszerzony o wartosc klucza class Element extends Wartownik { //klucz public $key; } //Lista z wartownikiem class ListaZWartownikiem { //wartownik public $wartownik; //rozmiar listy private $rozmiar = 0; //Utworz liste public function __construct() { $this->wartownik = new Wartownik; } //Utworz element o zadanej wartosci klucza static public function przypisz($wartosc) { $elem = new Element; $elem->key = $wartosc; return $elem; } //Wstaw nowa wartosc do listy public function wstawWartosc($wartosc) { $elem = ListaZWartownikiem::przypisz($wartosc); $this->wstawElement($elem); } //Wstaw nowy element do Marek Rynarzewski public function wstawElement(Element $elem) { $elem->next = $this->wartownik->next; $this->wartownik->next->prev = $elem; $this->wartownik->next = $elem; $elem->prev = $this->wartownik; $this->rozmiar++; } //Szukaj zadanej wartosci w liscie public function szukaj($wartosc) { $x = $this->wartownik->next; while ($x != $this->wartownik and $x->key != $wartosc) $x = $x -> next; if ($x != $this->wartownik) return $x; return NULL; } //Usuwa element z listy public function usun(Element $elem) { $elem->prev->next = $elem->next; $elem->next->prev = $elem->prev; $this->rozmiar --; } //Wykonaj funkcje dla n pierwszych elementow listy public function dlaNPierwszych($n, $funkcja) { $x = $this->wartownik->next; while ($n > 0 and $x != $this->wartownik) { $funkcja($x); $x = $x -> next; $n --; } } //Wykonaj funkcje dla wszystkich elementow listy public function dlaWszystkich($funkcja) { $x = $this->wartownik->next; while ($x != $this->wartownik) { $funkcja($x); $x = $x -> next; } } //Przekonwertuj liste na tablice public function toArray() { $tablica = array(); $x = $this->wartownik->next; while ($x != $this->wartownik) { $tablica[] = $x->key; $x = $x -> next; } return $tablica; } } ?>