• Viernes 15 de Noviembre de 2024, 12:45

Autor Tema:  Lista Doble Enlazada  (Leído 1599 veces)

cybergatita

  • Miembro MUY activo
  • ***
  • Mensajes: 154
    • Ver Perfil
Lista Doble Enlazada
« en: Lunes 7 de Noviembre de 2005, 04:13 »
0
hola chicos,,
ojala me puedan asesorar..
es una lista enlazada y bueno al llenar los datos todo bien, al mandarlos a pantalla todo bien, pero cuando le doy la opcion que me los manda a pantalla recorriendo la lista hacia atras. ahi es el problema no me manda nada:(
#include <stdio.h>
#include<stdlib.h>
#include<conio.h>
#include <alloc.h>

typedef struct persona
 {
   int numc;         /* Numero de control*/
   char nom[30];          /* Nombre del paciente */
   int  num;            /* Numero de afiliacion */
   int edad;               /* Edad del paciente */
   char enfe[30];         /* Enfermedad */
   struct persona *sig;
   struct persona  *ant;

 }nodo;

/* declaracion de apuntadores a NODO*/
  nodo *cola;
  nodo *cabeza;
  nodo *nuevo;

  /*FUNCIONES A UTILIZAR O HACER LLAMAR*/
void iniciar(void);
void altas();
void recibe (nodo* paciente);
void mostrar();
void mostrar1();
/* FUNCIONA PRINCIPAL */
void main ()
 {
   char opc;

do                                       /* MENU DE OPCION A REALIZAR*/
   {
      clrscr( );
      gotoxy(20,6);
      printf("******Bienvenido al  registro de un nuevo paciente******");
      //textcolor(BLUE);
      gotoxy(10,8);
      printf("**Presiona cualquier tecla para continuar y ver el menu**");
      //textcolor(BLUE);
      //textbackground(WHITE);
      getch();
      clrscr();
      gotoxy(30,8);
      printf("1.- Introduce datos del paciente");
      gotoxy(30,10);
      printf("2.- Visualizar los datos");
      gotoxy(30,12);
      printf("3.- Visualizar los datos hacia atras");
      gotoxy(30,14);
                printf("4.- Salir");
      opc=getch( );

                  /*switch que ejecuta opcion a realizar */
      switch(opc)
      {
         case '1':
            altas( );
            break;
         case '2':
            mostrar();
            break;
         case '3':
             mostrar1();
             break;
                        case '4':
            printf("\n\nBye.!HASTA PRONTO!. \npresiona cualquier tecla");
            getch();
           }
   }while (opc!='4');
}
    flushall(); /*LIMPIA VARIABLES de posible basura*/


 void altas ()
    {                                  /* funcion de altas y una variable*/
     nodo *tm;                         /*   temporal*/

     if (cabeza==NULL)
      {
      cabeza=(nodo*)malloc(sizeof(nodo));

      recibe (cabeza);

      printf ("!!!Dato Recibido!!");
      cabeza->sig=NULL;
      cola=cabeza;
      cabeza->sig =nuevo;
      }

     else
      {
       tm=(nodo*)malloc(sizeof(nodo));

      recibe ™;

      printf ("!!!Dato Recibido!!");

      tm->sig=cabeza->sig;
      cabeza->sig=nuevo;
      }
     }
                                /* funcion que muesrta los datos capturados */

void mostrar1()
   {
   nodo * tm;

   clrscr();
   tm=cabeza;

   while ™
      {
      printf("Nombre del paciente:%s\n",tm->nom);
      printf("Numero de control de expediente:%d\n",tm->numc);
      printf("Numero de afiliacion:%d\n",tm->num);
      printf("%Enfermedad que padece es:\n",tm->enfe);
      printf("Edad del paciente:%d\n",tm->edad);

      tm=tm->sig;
      }
    printf("\n\n\t");
   getch();


   }


 void mostrar()
   {
   nodo * tm;

   clrscr();
   tm=cabeza;

   while ™
      {
      printf("Nombre del paciente:%s\n",tm->nom);
      printf("Numero de control de expediente:%d\n",tm->numc);
      printf("Numero de afiliacion:%d\n",tm->num);
      printf("%Enfermedad que padece es:\n",tm->enfe);
      printf("Edad del paciente:%d\n",tm->edad);

      tm=tm->sig;
      }
    printf("\n\n\t");
   getch();


   }


void recibe (nodo* paciente)
 {
  printf ("\nNumero de expediente:\n ");
  scanf("%d",&(paciente->numc));
  printf ("Nombre del paciente: \n");
  scanf("%s",&(paciente->nom));
  printf ("\nNumero de afiliacion:\n");
  scanf ("%d",&(paciente->num));
  printf("\nEdad del paciente:\n");
  scanf("%d",&(paciente->edad));
  printf("\nPadecimiento o enfermedad del paciente:\n");
  scanf("%s",&(paciente->enfe));


   gotoxy(20,6);
   printf("\n\n\n");

 }


 void iniciar (void)
  {
   cola=cabeza=nuevo=NULL;
  }


presiento que voy a tener un gran ERROR verdad?

saludos chicos

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Lista Doble Enlazada
« Respuesta #1 en: Lunes 7 de Noviembre de 2005, 09:10 »
0
Supongo que la función que muestra los datos al revés es la siguiente:
Código: Text
  1.  
  2. void mostrar1()
  3. {
  4. nodo * tm;
  5.  
  6. clrscr();
  7. tm=cabeza;
  8.  
  9. while (tm)
  10. {
  11. printf(&#34;Nombre del paciente:%s&#092;n&#34;,tm-&#62;nom);
  12. printf(&#34;Numero de control de expediente:%d&#092;n&#34;,tm-&#62;numc);
  13. printf(&#34;Numero de afiliacion:%d&#092;n&#34;,tm-&#62;num);
  14. printf(&#34;%Enfermedad que padece es:&#092;n&#34;,tm-&#62;enfe);
  15. printf(&#34;Edad del paciente:%d&#092;n&#34;,tm-&#62;edad);
  16.  
  17. tm=tm-&#62;sig;
  18. }
  19. printf(&#34;&#092;n&#092;n&#092;t&#34;);
  20. getch();
  21.  
  22. }
  23.  
  24.  
Lo que deberías hacer es lo siguiente:
Primero editar el puntero a estructura anterior de la primera estructura de la cola, esto es, cuando creas una nueva lista la primera estructura debería apuntar de la siguiente manera:
cabeza->sig=NULL;
cabeza->ant=NULL;
Es importante que la primera estructura apunte a NULL cuando apunta a la estructura anterior para poder recorrer la lista igual que lo haces de delante hacia atrás.
Código: Text
  1.  
  2. void mostrar1()
  3. {
  4. nodo * tm;
  5.  
  6. clrscr();
  7. tm=cola;
  8.  
  9. while (tm)
  10. {
  11. printf(&#34;Nombre del paciente:%s&#092;n&#34;,tm-&#62;nom);
  12. printf(&#34;Numero de control de expediente:%d&#092;n&#34;,tm-&#62;numc);
  13. printf(&#34;Numero de afiliacion:%d&#092;n&#34;,tm-&#62;num);
  14. printf(&#34;%Enfermedad que padece es:&#092;n&#34;,tm-&#62;enfe);
  15. printf(&#34;Edad del paciente:%d&#092;n&#34;,tm-&#62;edad);
  16.  
  17. tm=tm-&#62;ant;
  18. }
  19. printf(&#34;&#092;n&#092;n&#092;t&#34;);
  20. getch();
  21.  
  22. }
  23.  
  24.  
Espero que te sirva de ayuda.
Un saludo.  :lightsabre:
No hay tonto más molesto que el ingenioso.