Discussion:
ejemplo de lista enlazada en C
(demasiado antiguo para responder)
Alberto
2005-11-08 16:22:11 UTC
Permalink
¿ Alguien me podria pasar un codigo ejemplo de una lista enlazada de
enteros en lenguaje C ?
Alberto
2005-11-08 17:59:13 UTC
Permalink
Post by Alberto
¿ Alguien me podria pasar un codigo ejemplo de una lista enlazada de
enteros en lenguaje C ?
he visto este codigo



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

typedef struct tipo_nodo
{
int dato;
struct tipo_nodo *sig;
}nodo;

nodo* NuevoNodo(int x)
{
nodo *a;
a=(nodo *)malloc(sizeof(nodo));
a->dato=x;
a->sig=NULL;
return a;
}

void InsertarFinLista(nodo **cabeza,int dato)
{
nodo *nuevo,*actual;
nuevo=NuevoNodo(dato);
nuevo->sig=NULL;

if (*cabeza==NULL)
*cabeza=nuevo;
else
{
actual=*cabeza;
while (actual->sig!=NULL)
actual=actual->sig;

actual->sig=nuevo;
}
}


void main(void)
{
int d;
nodo *cabeza,*actual;
cabeza=NULL;


InsertarFinLista(&cabeza,5);
InsertarFinLista(&cabeza,7);
InsertarFinLista(&cabeza,2);

actual=cabeza;

printf("Lista= ");
while (actual!=NULL)
{
printf("%d ",actual->dato);
actual=actual->sig;
}
printf("\n");

}




¿ Por que en la funcion InsertarFinLista hay que definir cabeza como
nodo** cabeza y no como nodo *cabeza ???

He probado a poner nodo *cabeza y la lista queda vacia
heltena
2005-11-09 16:13:41 UTC
Permalink
Post by Alberto
¿ Por que en la funcion InsertarFinLista hay que definir cabeza como
nodo** cabeza y no como nodo *cabeza ???
Porque modificas el puntero de la lista (fuera) en el codigo:

if (*cabeza==NULL)
*cabeza=nuevo;

y ese valor tienes que "devolverlo".
Alberto
2005-11-10 16:47:09 UTC
Permalink
Post by Alberto
Post by Alberto
¿ Por que en la funcion InsertarFinLista hay que definir cabeza como
nodo** cabeza y no como nodo *cabeza ???
if (*cabeza==NULL)
*cabeza=nuevo;
y ese valor tienes que "devolverlo".
gracias por la informacion. Me imagino que es el uso de paso de
parametros por referencia para devolver parametros. Podria hacerlo de
forma similar pasando simplemente un puntero (no puntero a puntero) y
devolviendo el puntero modificado ¿ no ?

Loading...