Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    211

    [c++] Implementazione liste di adiacenza

    Ho implementato le liste di adiacenza per i grafi in questo modo:

    struct Vertice
    {
    long Ver;
    Vertice* Next;
    };

    Vertice* Adj[MAXV];


    inline void AddAdj(long a,long b)
    {
    Vertice v;
    v.Ver=b;
    v.Next=Adj[a];
    Adj[a]=&v;
    }

    Quando avvio il programma, non funziona correttamente la funzione AddAdj. Dove ho sbagliato?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    211
    Mi rispondo da solo: ho provato a dichiarare v, all'interno della funzione AddAdj, come un puntatore a un vertice:
    Vertice* v=new Vertice;
    v->Ver=b;
    v->Next=Adj[a];
    Adj[a]=v;
    E adesso tutto funziona bene. Solo non capisco, come mai i puntatori creati internamente si conservano, mentre se non sono puntatotori no.

  3. #3
    Originariamente inviato da Cesaropa12
    Mi rispondo da solo: ho provato a dichiarare v, all'interno della funzione AddAdj, come un puntatore a un vertice:
    Vertice* v=new Vertice;
    v->Ver=b;
    v->Next=Adj[a];
    Adj[a]=v;
    E adesso tutto funziona bene. Solo non capisco, come mai i puntatori creati internamente si conservano, mentre se non sono puntatotori no.
    Ciao Cesaropa,

    provo a spiegare (sperando di non dire cavolate lol)

    Questa versione non funziona perche

    inline void AddAdj(long a,long b)
    {
    Vertice v;
    v.Ver=b;
    v.Next=Adj[a];
    Adj[a]=&v;
    }

    In questo modo credi una struttura v di tipo Vertice di tipo automatico. Cio vuol dire che alla fine dell'elaborazione della funzione questa struttura verra distrutta. Per cui, tanto per capirci,
    Adj[a] puntera poi chissā dove. (si dice che il puntatore č pendente)

    Se invece scrivi

    Vertice* v=new Vertice;

    assegni una porzione di memoria per creare una struttura Vertice puntata da v. La memoria che hai assegnato non si distrugge dopo l'uscita a funzione. Sarā il programmatore a liberare questa area di memoria con l'istruzione delete.

    Spero di essere stato abb chiaro!!! Ciauuuuu

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 © 2024 vBulletin Solutions, Inc. All rights reserved.