-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[46] Come gestico le liste collegate?

In generale, non avete bisogno di liste collegate in Perl, poiché con i normali array potete estrarre ed aggiungere elementi sia dalla testa che dalla coda (con push, pop, shift e unshift), oppure potete usare splice per inserire o rimuovere un numero arbitrario di elementi in punti arbitrari dell'array. Sia pop che shift sono operazioni O(1) sugli array dinamici di Perl. In assenza di operazioni di shift e pop, push in generale deve riallocare un numero di volte nell'ordine di log(N), e unshift ha bisogno di copiare i puntatori ogni volta che viene utilizzata.

Se proprio davvero volete, potete utilizzare le strutture descritte in perldsc o perltoot e fare esattamente ciò che il libro di algoritmi vi dice. Per esempio, immaginate un nodo di una lista come il seguente:

    $nodo = {
        VALORE       => 42,
        COLLEGAMENTO => undef,
    };

Potete scorrere la lista nel seguente modo:

    print "Lista: ";
    for ($nodo = $testa;  $nodo; $nodo = $nodo->{COLLEGAMENTO}) {
        print $nodo->{VALORE}, " ";
    }
    print "\n";

Potete aggiungere elementi alla lista così:

    my ($testa, $coda);
    $coda = aggiungi($testa, 1);       # crea una nuova testa
    for $valore ( 2 .. 10 ) {
        $coda = aggiungi($coda, $valore);
    }
    sub aggiungi {
        my($lista, $valore) = @_;
        my $nodo = { VALORE => $valore };
        if ($lista) {
            $nodo->{COLLEGAMENTO} = $lista->{COLLEGAMENTO};
            $lista->{COLLEGAMENTO} = $nodo;
        } else {
            $_[0] = $nodo;      # sostituisce la versione del chiamante
        }
        return $nodo;
    }

Ma, di nuovo, gli array forniti da Perl sono abbastanza validi praticamente sempre.

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google