elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  LISTA DOBLE
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: LISTA DOBLE  (Leído 4,085 veces)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
LISTA DOBLE
« 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!.


En línea

twins

Desconectado Desconectado

Mensajes: 54


Ver Perfil
Re: LISTA DOBLE
« Respuesta #1 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");
}



En línea

twins

Desconectado Desconectado

Mensajes: 54


Ver Perfil
Re: LISTA DOBLE
« Respuesta #2 en: 29 Septiembre 2012, 20:44 pm »

y a todo esto cual es la etiqueta para que se vea mas resaltado??
En línea

ankora45

Desconectado Desconectado

Mensajes: 52



Ver Perfil
Re: LISTA DOBLE
« Respuesta #3 en: 29 Septiembre 2012, 21:26 pm »

las etiquetas geshi de c++ xD
En línea

Hay dos cosas infinitas en este mundo, el universo y la estupidez humana, y de la primera no estoy muy seguro
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: LISTA DOBLE
« Respuesta #4 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!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con lista doble
Programación C/C++
josue_tux 0 2,011 Último mensaje 14 Junio 2010, 06:11 am
por josue_tux
[C] Lista doble y error en campo anterior, siguiente
Programación C/C++
edr89 2 2,797 Último mensaje 11 Octubre 2013, 06:09 am
por edr89
Ayuda con creacion de archivo txt en una lista doble
Programación C/C++
falconez 1 2,342 Último mensaje 18 Enero 2014, 02:39 am
por engel lex
Lista Doble Dinamica con insercion ordenada?
Programación C/C++
gibranini 6 4,823 Último mensaje 21 Mayo 2014, 17:29 pm
por gibranini
Problema al ordenar una Lista Doble(Lectura de XML)
Programación C/C++
falconez 1 2,166 Último mensaje 23 Febrero 2015, 03:25 am
por falconez
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines