PDA

Visualizza la versione completa : [C] Restituzione di un grafo a partire da una lista


kily_2001
27-12-2007, 15:38
ciao a tutti, mi sapete dire dove sbaglio nella funzione list2graph (funzione che presa uan lista ritorna un grafo)?


#include <stdio.h>
#include <stdlib.h>

#define MAX 50

struct linked_list {
int val;
struct linked_list *next;
};
typedef struct linked_list ELEMENT;
typedef ELEMENT *LINK;

typedef struct graph{
LINK adj_list[MAX];
int num_vert;
}graph;

void inserisci(LINK *l, int dato);
void print_list(LINK l);

graph list2graph(LINK l);

int main (void)
{
int array[]={0,1,0,4,1,2,3,1};
int i;

LINK l=NULL;

for(i=0;i<8;i++)//crea la lista dall'array
inserisci(&l,array[i]);

print_list(l);

graph g=list2graph(l);

//inserire codice per stampare la lista di adiacenza

system("PAUSE");
}

/************************************************** ****************************/

graph list2graph(LINK l)
{
graph tmp;

tmp.num_vert=5;

while (l->next != NULL)
{
inserisci(&tmp.adj_list[l->val],l->next->val);
l=l->next;
}

return tmp;
}

/****************************funzioni liste************************************/

void inserisci(LINK *l, int dato)
{
if (*l==NULL)
{
LINK punt;
punt = malloc(sizeof(ELEMENT));
punt->next = NULL;
punt->val = dato;
*l = punt;
}

else inserisci(&((*l)->next), dato);
}

void print_list(LINK l)
{
if(l==NULL)
printf("NULL\n");
else {
printf("%d ---> ", l->val);
print_list(l->next);
}
}

sbaglio qualcosa nel corpo del while, dev-c++ compila tutto perfettamente.

grazie a tutti!

kily_2001
27-12-2007, 15:53
ho risolto cosi:


graph list2graph(LINK l)
{
graph tmp;
int i;

tmp.num_vert=5;

for(i=0;i<5;i++)
tmp.adj_list[i]=NULL;


while (l->next != NULL)
{
inserisci(&tmp.adj_list[l->val],l->next->val);
l=l->next;
}

return tmp;
}

non c' qualcosa di + "elegante"? ciao e grazie

Loading