Foros de daboweb
MULTIMEDIA, Video digital, Grabación, Diseño gráfico, Diseño web, Programación => Webmasters - Diseño Web - Programación - Diseño gráfico => Mensaje iniciado por: beginner en 21 de Marzo de 2005, 03:26:44 pm
-
Nos han puesto este ejemplo de LISTA en clase, pero no lo entiendo. :( ¿Algún voluntario para explicarmelo? Thankx!
struct nodo
{
short n;
struct nodo * sig;
}
struct nodo *p, *pa, *pi; //QUÉ SIGNIFICAN TODOS ESTOS PUNTEROS??? S.O.S.!!!
short aux;
void main (void)
{
printf("introduce numero o 0 para terminar:");
scanf("%d", &aux);
while(aux!=0)
{
p=(struct nodo *) malloc(sizeof(struct nodo)); //esto lo puedo entender, es la reserva de memoria
p->n=aux;
p->sig=0;
if(pi==0) //¿y este baile de punteros? S-(
pi=p;
else
pa->sig=p;
pa=p;
printf("introduce numero o 0 para terminar:");
scanf("%d", &aux);
func_clasificacion(); //No es más que una función para ordenar
}
-
struct nodo
{
short n;
struct nodo * sig;
}
Esto primero es la declaracion de la estructura que tendra cada nodo de la lista, n sera un dato de tipo short y sig un puntero al siguiente nodo de la lista.
struct nodo *p, *pa, *pi;
Yesto es la declaracion de tres puntero p, pa y pi del tipo anterior a traves de los cuales se pueden crear tres listas.
p=(struct nodo *) malloc(sizeof(struct nodo));
como biendices esto crea memoria para el puntero p
p->n=aux; esto asigna al campo n del puntero p el valor de aux
p->sig=0; esto hace que la lista acabe aqui porque el siguiente elemento es 0 o NULL
if(pi==0)
pi=p;
esto lo que hace es hacer que el puntero pi apunte al mismo sitio q p es como si tuvieras lo mismo con dos nombres diferentes pi y p.
else
pa->sig=p;
con esto lo q haces es enlazar el nodo pa por delante del p haciendo q el campo siguiente de pa apunte a p, para esto previamente habra q haber reservado memoria para pa como lo hicimos para p.
Espero haberte sido de alluda
-
muchísimas gracias por las explicaciones. Un saludo :D
-
...gracias capsx... :wink: ...