Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    lista dinamica a puntatori

    è possibile realizzare in java quella che era in C++ una lista dinamica a puntatori???

  2. #2
    basta fare un qualcosa del genere:

    Codice PHP:
    private class Node /*nodo della lista: contiene l'elemento e l'indirizzo del successivo */
         
    Object key;
         
    Node next;

         
    Node(Object u) {
              
    key u;
              
    next null;
         }


    La lista quindi sarà una cosa del tipo:

    Codice PHP:
    public class Lista{
         private 
    Node head//inizio della lista
         
    private int nOggetti//numero elementi (supporto)
         

         
    public Lista() {
              
    head null;
              
    nOggetti 0;
         }

    Più i vari metodi per l'inserimento, rimozione... ecc...
    Al mio segnale... scatenate l'inferno!

  3. #3
    grazie r@ve m@ster..ma x quanto riguarda l'eliminazione dei nodi cosa potresti consigliarmi??java non utilizza un meccanismo detto Garbage Collector??

  4. #4
    Ma il garbage collector è un meccanismo che tiene traccia delle locazioni di memoria utilizzate e le libera solo quando non sono effettivamente più necessarie. Java non permette a un programmatore di accedere ad una qualsiasi locazione di memoria come avviene in altri linguaggi. In Java non esistono puntatori con le stesse caratteristiche di quelli del C/C++. Il Garbage Collector "parte" in automatico quando la virtual machine si rende conto che quella zona di memoria non è più utile, quindi non puoi (in realtà sarebbe possibile ma è sconsigliato) richiamare il garbage collector come invece faresti in C.

    per la cancellazione devi crearti un metodo apposito. Ad esempio, con la mia soluzione (che ho usato tempo fa ma che reperii in internet...non ricordo dove ) io ho fatto:

    Codice PHP:
    public void cancella(int kthrows IllegalArgumentException {
         if (
    || >= nOggetti)     //accedo ad un indice della lista inesistente
              
    throw new IllegalArgumentException();
         else {
              if (
    nOggetti == 1) { //è l'unico elemento quindi coincide con la head
                   
    head null;
              } else {
                   if (
    == 0) { //è il primo elemento
                        
    head head.next;  //pongo head uguale al nodo puntato da head stesso
                   
    } else { //è un elemento generico
                        //posizionati nell’elemento precedente a quello da cancellare
                        
    Node indice head;
                        for (
    int i=k-1i++)
                             
    indice indice.next;
                        
    //cancello, facendo puntare "indice" al nodo puntato dal suo successivo
                        
    indice.nextindice.next.next
                   }
              }
              
    nOggetti--;
         }

    Al mio segnale... scatenate l'inferno!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.