[URGENTE] Lista C

di il
1 risposte

[URGENTE] Lista C

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;
}

1 Risposte

  • Re: [URGENTE] Lista C

    Vedi col debugger cosa succede dopo la chiamata alla funzione init_nodo
Devi accedere o registrarti per scrivere nel forum
1 risposte