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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  funcion mostrar lista doble lenguaje c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: funcion mostrar lista doble lenguaje c  (Leído 3,668 veces)
spectrumni

Desconectado Desconectado

Mensajes: 2


Ver Perfil
funcion mostrar lista doble lenguaje c
« en: 26 Enero 2012, 23:06 pm »

hola como estan tengo una duda ojala me ayuden c: lo que pasa es que me pusieron un trabajo en lenguaje c sobre listas dobles, y voy en la funcion mostrar, la cuestion es que si compila sin ningun error ni nada, pero cuando creo la lista y le meto los datos hasta hay todo bien, pero cuando los quiero mostrar con la funcion MostrarLista no muestra nada y nisiquiera explota ni nada solo me vuelve a mostrar el menu, este es el programa que llevo hasta el momento, no estoy pidiendo el programa completo, solo que me ayuden con la funcion mostrar que no me muestra la lista, gracias.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct lista{ //estructura
  5. int dato;
  6. struct lista *sig;
  7. struct lista *ant;
  8. };
  9.  
  10. typedef struct lista nodo;
  11.  
  12. int menu(void);
  13. nodo *CrearLista(nodo *registro);
  14. void MostrarLista(nodo *registro);
  15.  
  16.  
  17. main(){
  18. nodo *prin;
  19. int op;
  20.  
  21. do{
  22. system("cls");
  23. op=menu();
  24. switch(op){
  25. case 1:
  26. prin=(nodo *)malloc(sizeof(nodo));
  27. prin=CrearLista(prin);
  28. break;
  29.  
  30. case 2:
  31. MostrarLista(prin);
  32. break;
  33.  
  34. case 3:
  35.  
  36. case 4:
  37.  
  38. case 5:
  39. printf("hasta luego\n");
  40.  
  41. default:
  42. getch();
  43. }
  44. }while(op != 5);
  45. getch();
  46. }
  47.  
  48. int menu(void){
  49. int opcion;
  50. do{
  51. printf("1. Crear Lista\n");
  52. printf("2. Mostrar Lista\n");
  53. printf("3. Insertar en Lista\n");
  54. printf("4. Borrar dato\n");
  55. printf("5. Salir\n");
  56. printf("Ingrese la Opcion: ");
  57. scanf("%d",&opcion);
  58. if(opcion<1 || opcion>5)
  59. printf("opcion no valida\n");
  60. }while(opcion<1 || opcion>5);
  61. return(opcion);
  62. }
  63.  
  64. nodo *CrearLista(nodo *registro){
  65. registro->ant=NULL;
  66. while(registro->sig != NULL){
  67.  
  68. printf("Introducir dato (introducir 0 para terminar): ");
  69. scanf("%d",&registro->dato);
  70. if(registro->dato == 0){
  71. registro->sig = NULL;
  72. printf("lista creada");
  73. getch();
  74. }
  75. else{
  76. registro->sig=(nodo *)malloc(sizeof(nodo));
  77. registro->sig->ant=registro;
  78. registro=registro->sig;
  79. }
  80. }
  81. return(registro);
  82. }
  83.  
  84. void MostrarLista(nodo *registro){
  85. while(registro->sig != NULL){
  86. printf("%d", registro->dato);
  87. registro=registro->sig;
  88. }
  89. return;
  90. }

EDIT:

weno gracias ferno por ayudarme lo he solucionado con este codigo en la funcion mostrar c:

Código
  1. void MostrarLista(nodo *registro){
  2.     while(registro->ant != NULL)registro=registro->ant;//rewind
  3.     while(registro->sig != NULL){
  4.                         printf("%d", registro->dato);
  5.                         registro=registro->sig;
  6.     }
  7.     getch();
  8.     return;
  9. }
  10.  
  11.  


« Última modificación: 26 Enero 2012, 23:44 pm por spectrumni » En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: funcion mostrar lista doble lenguaje c
« Respuesta #1 en: 26 Enero 2012, 23:37 pm »

Antes que nada, todo código que postees ponlo dentro de las etiquetas GeSHi así es más legible.
Estuve viendo un poco, y creo que tu problema particular se da debido a que en la función CrearLista, siempre devuelves la variable "registro" la cual, en este caso, siempre es el último nodo de la lista, y entonces, el siguiente de ese nodo será NULL.
Por ende, en la función MostrarLista, jamás entrará al while, ya que SIEMPRE el siguiente de ese registro será NULL (por ser el último nodo de la lista como dije antes).
Tratá de encontrarle la vuelta y encajar bien ambas funciones!


En línea

spectrumni

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: funcion mostrar lista doble lenguaje c
« Respuesta #2 en: 26 Enero 2012, 23:39 pm »

Antes que nada, todo código que postees ponlo dentro de las etiquetas GeSHi así es más legible.
Estuve viendo un poco, y creo que tu problema particular se da debido a que en la función CrearLista, siempre devuelves la variable "registro" la cual, en este caso, siempre es el último nodo de la lista, y entonces, el siguiente de ese nodo será NULL.
Por ende, en la función MostrarLista, jamás entrará al while, ya que SIEMPRE el siguiente de ese registro será NULL (por ser el último nodo de la lista como dije antes).
Tratá de encontrarle la vuelta y encajar bien ambas funciones!

a ya creo que encontre el problema gracias a ti c:
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 1,839 Último mensaje 14 Junio 2010, 06:11 am
por josue_tux
LISTA DOBLE
Programación C/C++
leosansan 4 3,783 Último mensaje 29 Septiembre 2012, 21:33 pm
por leosansan
[C] Lista doble y error en campo anterior, siguiente
Programación C/C++
edr89 2 2,601 Ú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,142 Último mensaje 18 Enero 2014, 02:39 am
por engel lex
Lista Doble Dinamica con insercion ordenada?
Programación C/C++
gibranini 6 4,586 Último mensaje 21 Mayo 2014, 17:29 pm
por gibranini
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines