principiante en listas, pilas...
Pido ayuda para entender este código, please:
struct nodo
{
short n;
struct nodo * sig;
}
struct nodo *p, *pa, *pi; //Para qué son estos punteros??
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) //¿Qué significan estas lÃneas de aquÃ...
pi=p;
else
pa->sig=p;
pa=p; //...hasta aquÃ?
printf("introduce numero o 0 para terminar:");
scanf("%d", &aux);
func_clasificacion(); //No es más que una función para ordenar
}
Gracias a todos los voluntarios.
struct nodo
{
short n;
struct nodo * sig;
}
struct nodo *p, *pa, *pi; //Para qué son estos punteros??
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) //¿Qué significan estas lÃneas de aquÃ...
pi=p;
else
pa->sig=p;
pa=p; //...hasta aquÃ?
printf("introduce numero o 0 para terminar:");
scanf("%d", &aux);
func_clasificacion(); //No es más que una función para ordenar
}
Gracias a todos los voluntarios.
Mira por lo que veo esto trata de recoger los numeros que le manda el usuario y almacenarlos mediante punteros y con la funcion de clasificacion los ordena.
Por lo que creo p es usado para el puntero que se crea en ese momento, pa es usado solo como el inicio de la lista y pi es usado como el ultimo nodo el cual cambiara de valor cada vez que se agregue uno nuevo, pero esto tiene bastantes errores:
struct nodo *p, *pa, *pi; //Bueno esto ya lo dije
short aux; //esto esta para recibir el valor pero es más recomendable lo uses como una variable local
p=(struct nodo *) malloc(sizeof(struct nodo)); //esto lo puedo entender, es la reserva de memoria
En si mismo esto esta correcto, pero también debes pedir memoria para el resto de los punteros, el pa y pi esto solo debe ser una sola vez, los errores que esto trae se presentan cuando se ejecuta el código más adelante.
if(pi==0) //¿Qué significan estas lÃneas de aquÃ...
Aquà decide si el nodo pi esta "vacio"(en realidad en el primer y segundo ciclo esto realiza su función perfectamente, sin embargo en el tercero la decisión vuleve a ser válida, el resto de las decisiones solo intercalan los valores, razón por la que debes pedir memoria); he inicia el principio de la lista, aunque el valor de comparación "0" esta correcto usa NULL desde el compilador se asignan valores como ' ', 0 asà que es mejor dejarle esto al compilador.
pi=p; //se inicia el primer nodo con el que se acaba de capturar
pa->sig=p;
//En caso de que no sea el primero vinculara pa(no le has reservado memoria), con p.
struct nodo
{
short n;
struct nodo *sig;
};
struct nodo *p, *pa, *pi;
void main (void)
{
short aux;
pa=(struct nodo*)malloc(sizeof(nodo));
pi=(struct nodo*)malloc(sizeof(nodo));
if(pa!=NULL && pi!=NULL)
{
pi=NULL;
do
{
printf("nn Introduzca '0' para terminar...");
printf("nnIntroduce un numero: ");
scanf("%d",&aux);
p=(struct nodo *) malloc(sizeof(struct nodo));
if(p!=NULL)
{
p->n=aux;
p->sig=NULL;
if(pi==NULL)
{
pi=p;
pa=pi;
}
else
{
pa->sig=p;
pa=p;
}
}//asignacion de memoria de p
else
{
printf("nn Memoria Insuficiente...");
aux=0;
}
}while(aux!=0);
}//asignacion de memoria
}
Por lo que creo p es usado para el puntero que se crea en ese momento, pa es usado solo como el inicio de la lista y pi es usado como el ultimo nodo el cual cambiara de valor cada vez que se agregue uno nuevo, pero esto tiene bastantes errores:
struct nodo *p, *pa, *pi; //Bueno esto ya lo dije
short aux; //esto esta para recibir el valor pero es más recomendable lo uses como una variable local
p=(struct nodo *) malloc(sizeof(struct nodo)); //esto lo puedo entender, es la reserva de memoria
En si mismo esto esta correcto, pero también debes pedir memoria para el resto de los punteros, el pa y pi esto solo debe ser una sola vez, los errores que esto trae se presentan cuando se ejecuta el código más adelante.
if(pi==0) //¿Qué significan estas lÃneas de aquÃ...
Aquà decide si el nodo pi esta "vacio"(en realidad en el primer y segundo ciclo esto realiza su función perfectamente, sin embargo en el tercero la decisión vuleve a ser válida, el resto de las decisiones solo intercalan los valores, razón por la que debes pedir memoria); he inicia el principio de la lista, aunque el valor de comparación "0" esta correcto usa NULL desde el compilador se asignan valores como ' ', 0 asà que es mejor dejarle esto al compilador.
pi=p; //se inicia el primer nodo con el que se acaba de capturar
pa->sig=p;
//En caso de que no sea el primero vinculara pa(no le has reservado memoria), con p.
struct nodo
{
short n;
struct nodo *sig;
};
struct nodo *p, *pa, *pi;
void main (void)
{
short aux;
pa=(struct nodo*)malloc(sizeof(nodo));
pi=(struct nodo*)malloc(sizeof(nodo));
if(pa!=NULL && pi!=NULL)
{
pi=NULL;
do
{
printf("nn Introduzca '0' para terminar...");
printf("nnIntroduce un numero: ");
scanf("%d",&aux);
p=(struct nodo *) malloc(sizeof(struct nodo));
if(p!=NULL)
{
p->n=aux;
p->sig=NULL;
if(pi==NULL)
{
pi=p;
pa=pi;
}
else
{
pa->sig=p;
pa=p;
}
}//asignacion de memoria de p
else
{
printf("nn Memoria Insuficiente...");
aux=0;
}
}while(aux!=0);
}//asignacion de memoria
}
