• Miércoles 15 de Mayo de 2024, 01:45

Autor Tema:  Lista Simplemente Enlazada  (Leído 1177 veces)

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Lista Simplemente Enlazada
« en: Domingo 2 de Julio de 2006, 21:56 »
0
No entiendo bien que hace la funciion insertar. Aca esta el codigo, la parte de ing por teclado la suprimi para que el codigo sea mas corto.

Código: Text
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include "carga_lectura.h"
  4.  
  5.  
  6. int lista_vacia(struct lista *);
  7. struct lista* lista_lena();
  8. struct lista* insertar(struct lista *, struct dato);
  9. void listar(struct lista *);
  10. struct lista* eliminar(struct lista *q, int nl);
  11.  
  12. void main() {
  13.   struct dato x;
  14.   struct lista *p=NULL;
  15.   FILE *arch;
  16.  
  17.  
  18.   if(lista_vacia(p)) {
  19.     printf("La lista esta vacia");
  20.   }
  21.  
  22.   /* CARGA DE LOS DATOS */  
  23.  
  24.   p = insertar(p,x);
  25.  
  26.   listar(p);
  27.  
  28.   p = eliminar(p, x.leg);
  29.  
  30.   fclose(arch);
  31.   printf("Presione una tecla para salir");
  32.   getch();
  33. }
  34.  
  35.  
  36.  
  37. int lista_vacia(struct lista *q) {
  38.   if(q = NULL) {
  39.     return 1;
  40.   } else {
  41.     return 0;
  42.   }
  43. }
  44.  
  45.  
  46. struct lista* insertar(struct lista *q, struct dato d) {
  47.   struct lista *nuevo, *ant=q, *act=q;
  48.  
  49.   if((nuevo=lista_llena())==NULL) {
  50.     printf("Lista llena");
  51.   } else {
  52.     nuevo->d = d;
  53.     nuevo->sig = NULL;
  54.  
  55.     if(lista_vacia(q)) q = nuevo;
  56.     else {
  57.       while(act && act->d.leg < d.leg) {
  58.         ant=act;
  59.         act=act->sig;
  60.       }
  61.       if(ant==act) {
  62.         nuevo->sig = q;
  63.         q = nuevo;
  64.       } else {
  65.         ant->sig=nuevo;
  66.         nuevo->sig=act;
  67.       }
  68.     }
  69.   }
  70.   return (q);
  71. }
  72.  
  73. struct lista * lista_lena() {
  74.   struct lista *q;
  75.   q = (struct lista *)malloc(sizeof(struct lista));
  76.   return q;
  77. }
  78.  
  79. void listar(struct lista *q) {
  80.   if(lista_vacia(q)) {
  81.     printf("Lista vacia");
  82.   } else {
  83.     while(q) {
  84.       printf("%5d %-40s %10.2f \n", q->d.leg, q->d.apyn, q->d.prom);
  85.       q = q->sig;
  86.     }
  87.   }
  88. }
  89.  
  90. struct lista* eliminar(struct lista *q, int nl) {
  91.   struct lista *ant=q, *act=q;
  92.   if(lista_vacia(q)) {
  93.     printf("Lista vacia");
  94.   } else {
  95.     while(act && nl > act->d.sig) {
  96.       ant = act;
  97.       act = act->sig;
  98.     }
  99.     if((act==NULL)||(act->d.leg !=nl)) {
  100.       printf("No encontrado");
  101.     } else {
  102.       if(ant==act) {
  103.         q=act->sig;
  104.       } else {
  105.         ant->sig=act->sig;
  106.       }
  107.       free(act);
  108.     }
  109.   }
  110.   return (q);
  111. }
  112.  
  113.  

Esta parte del codigo no entiendo, mas especificamente el while.

Código: Text
  1.     if(lista_vacia(q)) q = nuevo;
  2.     else {
  3.       while(act && act->d.leg < d.leg) {
  4.         ant=act;
  5.         act=act->sig;
  6.       }
  7.       if(ant==act) {
  8.         nuevo->sig = q;
  9.         q = nuevo;
  10.       } else {
  11.         ant->sig=nuevo;
  12.         nuevo->sig=act;
  13.       }
  14.     }
  15.  

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Lista Simplemente Enlazada
« Respuesta #1 en: Lunes 3 de Julio de 2006, 22:22 »
0
como yo veo despues de que compruebas que la lista no esta vacia haces un recorrido de la lista de los archivos y recorres el archivo anterior a una siguiente posiciòn y el nuevo dato lo colocas en el lugar del que recorriste.
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Lista Simplemente Enlazada
« Respuesta #2 en: Martes 4 de Julio de 2006, 15:08 »
0
gracias, ya estoy entendiendo un poco mejor como funciona. :D

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Lista Simplemente Enlazada
« Respuesta #3 en: Martes 4 de Julio de 2006, 20:37 »
0
:P  :P  :P
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]