Ciao ragazzi,
scusate per la presunzione, ma co sto C non riesco a trovare il problema del passaggio dei parametri nella pop e nella push nell'implementazione di una lista. Mi saro' aituato troppo al c++...
Cmq quando passo l'indirizzo di una lista, non so perche', ma ogni volta sembra che le operazioni di pop e di push sembrano "invisibili", cioe' il tipico errore di quando si fanno passaggi per valore e non per riferimento. ma io il riferimento gli passo!
Forse mi sono dimenticato qualcosa??
Per favore aiutatemi, senno non me ne esco piu fuori! Sto da meta' giornata a sbatterci!
#include <stdlib.h>
#include <stdio.h>
#include "lista.h"
void init_nodo(nodo* n,const tipo e,nodo* pros)
{
n->elem=e;
n->next=pros;
}
void distruggi_nodo(nodo* n)
{
free(n);
}
void set_elem(nodo* n,const tipo e)
{
n->elem=e;
}
void set_next(nodo* n,nodo* node)
{
n->next=node;
}
nodo* get_next(nodo* n)
{
return n->next;
}
tipo get_elem(nodo* n)
{
return n->elem;
}
void init_lista(lista* list)
{
list->l=0;
list->nelem=0;
}
void distruggi_lista(lista* list)
{
tipo app=0;
int i;
for (i=0;i<get_nelem(list);i++)
app=pop(list);
list->l=0;
app=0;
}
const int get_dim(lista* list)
{
return DIM;
}
const int get_nelem(lista* list)
{
return list->nelem;
}
void push(lista* list,const tipo elem)
{
nodo* nuovo=malloc(sizeof(nodo));
init_nodo(nuovo,elem,list->l);
list->l=nuovo;
list->nelem++;
}
tipo pop(lista* list)
{
nodo* app=list->l;
tipo e=get_elem(list->l);
list->l=get_next(list->l);
distruggi_nodo(app);
app=0;
list->nelem--;
return e;
}
void visualizza_lista(lista* list)
{
nodo* app=list->l;
while (app)
{
printf("\n %p",app);
app=get_next(app);
}
printf("\n");
app=0;
}