|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Oct 2010
Messaggi: 16
|
[C] Prelevare valori da una lista di adiacenza
salve, il mio problema riguarda un es. di programmazione in C, ho una lista di adiacenza, cioè un vettore di puntatori a liste concatenate, dopo aver inserito i valori nelle liste il programma li deve stampare su schermo.
ecco il sorgente: Codice:
#include <stdio.h> #include <stdlib.h> #define MAX 100 /*elemento di una lista*/ struct nodo { int n_nodo; struct nodo *next; }; /*lista di adiacenza*/ struct nodo *Adj[MAX]; /*crea una lista e ci inserisce i valori*/ struct nodo *crea_lista(void){ struct nodo *p_lista, *p;//Puntatori ad una lista int x, n, i; printf("Numero elementi nella lista: "); scanf("%d", &n); p_lista = NULL; printf("Inserire elementi della lista:\n"); for(i=0; i<n; i++) { scanf("%d", &x); p = (struct nodo *)malloc(sizeof(struct nodo));//Allocazione dinamica di un elemento p->n_nodo = x; //Inserisce il valore nell'elemento p->next = p_lista; p_lista = p; //p_lista punta alla lista creata } return(p_lista); } int crea_grafo(struct nodo *lista[]){ int i, n; printf("Numero dei nodi del grafo: "); scanf("%d", &n); for(i=0;i<n;i++){ printf("Lista di adiacenza del nodo %d.\n",i); //Ad ogni elemento del vettore restituisce //un puntatore ad una lista creata con crea_lista lista[i]=crea_lista(); } //Restituisce la dimensione del vettore return(n); } int main(){ struct nodo *a; //Puntatore ad una lista int c, i=0, n, j=0; n = crea_grafo(&Adj[MAX]); //Memorizza i valori nella lista di adiacenza printf("lista[%d]:\n",i); //prende un elemento della vettore Adj, ad esempio il primo //che corrisponde ad un puntatore ad una lista //e ne stampa i valori della lista for(a=*Adj; a=NULL; a->next){//fin quando c'è un elemento scorre la lista c=a->n_nodo; //assegna il valore n_nodo di ogni elemento della lista in una variabile printf("elemento %d: %d\n",i, c); // stampa la variabile i=i+1; } getchar(); getchar(); } vi prego di scusarmi se non ho rispettato le regole, potete eliminare il post ho cercato di rendere il codice più leggibile possibile, se non capite qualcosa chiedete |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jun 2004
Città: Pecetto
Messaggi: 73
|
Io scriverei cosi:
Codice:
a=*Adj; while (a !=NULL) { c=a->n_nodo; //assegna il valore n_nodo di ogni elemento della lista in una variabile printf("elemento %d: %d\n",i, c); // stampa la variabile i=i+1; a=a->next; }
__________________
Gianni |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Oct 2010
Messaggi: 16
|
ti ringrazio ma anche seguendo il tuo suggerimento i valori non vengono stampati, sebbene il codice non fa una piega.
altre idee? |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Jun 2004
Città: Pecetto
Messaggi: 73
|
Codice:
n = crea_grafo(&Adj[MAX]); //Memorizza i valori nella lista di adiacenza deve essere n = crea_grafo(&Adj[0]); //Memorizza i valori nella lista di adiacenza Inoltre nella funzione crea_lista non sono sicuro di come gestisci next non dovrebbe essere il pPrevious->next = pNuovo?
__________________
Gianni |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Oct 2010
Messaggi: 16
|
il programma finiva subito perchè puntavo direttamente all'ultimo elemento, quindi non aveva elementi da stampare, ora invece funziona, grazie GioVegas!
comunque quello che dici è giusto solo che invece io creo un nuovo elemento e questo punta all'inizio della lista, quindi lo aggiungo in cima e non in fondo |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:05.