Nwlapcug.com


Come Traverse in modo ricorsivo in una lista concatenata

La struttura di dati di lista concatenata è una potente alternativa alla semplice matrici. A differenza delle matrici, i dati possono essere aggiunti a rapidamente e rimosso da un elenco collegato senza ricreare l'elemento di un elenco alla volta. Tuttavia, a differenza delle matrici, dati in una lista concatenata possono accedervi solo in ordine. È possibile farlo con un semplice ciclo o con una funzione ricorsiva (o auto-chiamata). Questo sarà scritto in Java, ma il codice può essere implementato in qualsiasi lingua con solo lievi modifiche per soddisfare le differenze di sintassi.

Istruzioni

1

Aprire un editor di testo.

2

Incollare il seguente codice di Java:

public class RecursiveLLTraverser {

public static void traverseList(LinkedList l) {

}

}

Tutto il codice andrà all'interno del metodo "traverseList".

3

Incollare il seguente all'interno del metodo "traverseList":

Se (l.size() = = 0) return;

Se (l.size() > 0) {

LinkedList n = l.clone();

Object o = n.removeFirst();

o.doSomething();

traverseList(n);

}

Questo prende un elenco collegato e rende un duplicato superficiale di esso con il primo elemento rimosso (e alcune elaborazioni eseguite su di essa.) Tale duplicato viene quindi eseguito attraverso la traversata elenco stesso. Alla fine, il clone sarà vuoto, nel qual caso la traversata metodo elenco restituirà semplicemente.

Consigli & Avvertenze

  • Tutti gli algoritmi ricorsivi richiedono almeno due casi: un caso di base, che deve restituire, e un caso ricorsivo, che riduce la dimensione dei dati a qualcosa di più facilmente gestibili. Un bug comune in metodi ricorsivi sta dimenticando il caso base. Questo provoca un ciclo infinito che alla fine si blocca quando il computer si esaurisce lo spazio dello stack.
  • Metodi ricorsivi dipendono un'impostazione di sistema denominata "dimensione dello stack", che cambia con il sistema operativo e la lingua. In questa sezione di memoria tiene traccia di tutti i metodi attualmente in esecuzione. Cercando un algoritmo ricorsivo su un elenco estremamente grande possa produrre errori dello stack.