Tengo el problema en una lista doblemente enlazada que no me imprime al reves, es decir de abajo a arriba, es más se suele colgar al final. Y no pillo el fallo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct lista_elementos
{
char elem[40];
struct lista_elementos *sig;
struct lista_elementos *ant;
};
typedef struct lista_elementos nodo;
void crear(nodo *registro,nodo *fin,nodo *anterior);
void mostrar_abajo(nodo *pt);
void mostrar_arriba(nodo *pt);
int main()
{
nodo *prin,*fin;
prin=(nodo*)malloc(sizeof(nodo));
fin=(nodo*)malloc(sizeof(nodo));
crear(prin,fin,NULL);
puts("\n");
mostrar_abajo(prin);
puts("\n");
mostrar_arriba(fin);
}
void crear(nodo *registro,nodo *fin,nodo *anterior)
{
printf("Dato (Escribir LEOSANSAN para terminar): ");
scanf(" %s",registro->elem);
if (strcmp(registro->elem,"LEOSANSAN")==0)
{
registro->sig=NULL;
registro->ant=anterior;
fin=registro;
}
else
{
registro->sig=(nodo*)malloc(sizeof(nodo));
registro->ant=anterior;
crear(registro->sig,fin,registro);
}
}
void mostrar_abajo(nodo *pt)
{
if (pt->sig!=NULL)
{
printf("%s ",pt->elem);
mostrar_abajo(pt->sig);
}
}
void mostrar_arriba(nodo *pt)
{
if (pt->ant==NULL)
printf("%s",pt->elem);
else
{
printf("%s ",pt->elem);
mostrar_arriba(pt->ant);
}
}
Gracias desde ahora y saludos!.
Hola a mi parecer el ejercico esta bien pero lo encuentro un poco desordenado yo hize el ejercicio a mi parecer, no se si lo entindas pero aqui esta para que lo veas,saludos.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct lista_elementos{
int elem;
struct lista_elementos *sig;
struct lista_elementos *ant;
};
typedef struct lista_elementos nodo;
void crear(nodo **lista);
void mostrar(nodo **lista);
int main(){
nodo *lista=NULL;
crear(&lista);
crear(&lista);
crear(&lista);
crear(&lista);
mostrar(&lista);
return(0);
}
void crear(nodo **lista){
printf("Valor para el nodo\n");
nodo *nuevo=(nodo*)malloc(sizeof(nodo));
scanf("%i",&nuevo->elem);
nuevo->sig=NULL;
nuevo->ant=NULL;
if(*lista==NULL)
*lista=nuevo;
else{
nodo *aux1=*lista;
while(aux1->sig!=NULL)
aux1=aux1->sig;
aux1->sig=nuevo;
nuevo->ant=aux1;
aux1=nuevo;
}
}
void mostrar(nodo **lista){
nodo *aux=*lista;
printf("lista=");
while(aux!=NULL){
printf("[%i]->",aux->elem);
aux=aux->sig;
}
printf("NULL");
aux=*lista;
while(aux->sig!=NULL)
aux=aux->sig;
printf("\n");
printf("lista=");
while(aux!=NULL){
printf("[%i]->",aux->elem);
aux=aux->ant;
}
printf("NULL");
}
y a todo esto cual es la etiqueta para que se vea mas resaltado??
las etiquetas geshi de c++ xD
CitarCuando escribes el post en la parte superior aparece "GeSHi", picas y seleccionas C o C++ o lo que creas y automáticamente aparecen las etiquetas "[ code=c][ /code]" , sin los espacios en blanco que he puesto o algo parecido y ya en medio le insertas el código.
Gracias por el código. ¡Otro ejemplo para extrujar!