Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: leosansan en 29 Septiembre 2012, 12:30 pm



Título: LISTA DOBLE
Publicado por: leosansan en 29 Septiembre 2012, 12:30 pm
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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct lista_elementos
  6. {
  7. char elem[40];
  8. struct lista_elementos *sig;
  9. struct lista_elementos *ant;
  10. };
  11.  
  12. typedef struct lista_elementos nodo;
  13.  
  14. void crear(nodo *registro,nodo *fin,nodo *anterior);
  15. void mostrar_abajo(nodo *pt);
  16. void mostrar_arriba(nodo *pt);
  17.  
  18. int main()
  19. {
  20.    nodo *prin,*fin;
  21.    prin=(nodo*)malloc(sizeof(nodo));
  22.    fin=(nodo*)malloc(sizeof(nodo));
  23.    crear(prin,fin,NULL);
  24.    puts("\n");
  25.    mostrar_abajo(prin);
  26.    puts("\n");
  27.    mostrar_arriba(fin);
  28. }
  29.  
  30. void crear(nodo *registro,nodo *fin,nodo *anterior)
  31. {
  32.    printf("Dato (Escribir LEOSANSAN para terminar): ");
  33.    scanf(" %s",registro->elem);
  34.  
  35.    if (strcmp(registro->elem,"LEOSANSAN")==0)
  36.            {
  37.            registro->sig=NULL;
  38.            registro->ant=anterior;
  39.            fin=registro;
  40.        }
  41.    else
  42.        {
  43.            registro->sig=(nodo*)malloc(sizeof(nodo));
  44.            registro->ant=anterior;
  45.            crear(registro->sig,fin,registro);
  46.        }
  47. }
  48.  
  49. void mostrar_abajo(nodo *pt)
  50. {
  51.    if (pt->sig!=NULL)
  52.        {
  53.            printf("%s  ",pt->elem);
  54.            mostrar_abajo(pt->sig);
  55.        }
  56. }
  57. void mostrar_arriba(nodo *pt)
  58. {
  59.   if (pt->ant==NULL)
  60.    printf("%s",pt->elem);
  61.    else
  62.        {
  63.            printf("%s  ",pt->elem);
  64.            mostrar_arriba(pt->ant);
  65.        }
  66. }
  67.  
Gracias desde ahora y saludos!.


Título: Re: LISTA DOBLE
Publicado por: twins en 29 Septiembre 2012, 20:42 pm
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");
}



Título: Re: LISTA DOBLE
Publicado por: twins en 29 Septiembre 2012, 20:44 pm
y a todo esto cual es la etiqueta para que se vea mas resaltado??


Título: Re: LISTA DOBLE
Publicado por: ankora45 en 29 Septiembre 2012, 21:26 pm
las etiquetas geshi de c++ xD


Título: Re: LISTA DOBLE
Publicado por: leosansan en 29 Septiembre 2012, 21:33 pm
Citar
Cuando 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!