krivo
25-10-2010, 12:48
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:
#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();
}
penso che la parte di scorrimento e stampa della lista sia giusta (quella in grassetto) ma evidentemente non è così.
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
ecco il sorgente:
#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();
}
penso che la parte di scorrimento e stampa della lista sia giusta (quella in grassetto) ma evidentemente non è così.
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