Advertisement
karlangadas

Listas funciones

Feb 23rd, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.35 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "Lista.h"
  4.  
  5. /* Crea una lista vacía */
  6. void Lista_init(TLista *L) {
  7.     L->inicio = NULL; //(*L).inicio = NULL;
  8.     L->fin = NULL; //  (*L).fin = NULL;
  9.     L->numElem = 0;
  10. }
  11.  
  12. /* Verifica si la lista está vacía */
  13. int Lista_estaVacia(TLista *L) {
  14.     return L->numElem == 0;
  15. }
  16.  
  17. /* Libera la memoria ocupada por todos los elmentos de la lista */
  18. void Lista_finalizar(TLista *L) {
  19.     TNodo *ptrRec;
  20.     ptrRec = L->inicio;
  21.     while (ptrRec) {
  22.         L->inicio = L->inicio->sig;
  23.         free(ptrRec);
  24.         ptrRec = L->inicio;
  25.     }
  26.     L->fin = NULL;
  27.     L->numElem = 0;
  28. }
  29.  
  30. /* Inserta un nuevo elemento en la lista */
  31. void Lista_insertar(TLista *L, TElemento nuevoElem) {
  32.     TNodo *ptrNuevo;
  33.     ptrNuevo = malloc(sizeof (TNodo));
  34.  
  35.     if (ptrNuevo != NULL) {
  36.         // Crear el nuevo nodo
  37.         ptrNuevo->elem = nuevoElem;
  38.         ptrNuevo->sig = NULL;
  39.         // Insertar el nuevo nodo al final de la lista
  40.         if (!Lista_estaVacia(L)) {
  41.             L->fin->sig = ptrNuevo;
  42.         } else {
  43.             L->inicio = ptrNuevo;
  44.         }
  45.         L->fin = ptrNuevo;
  46.         (L->numElem)++;
  47.     }
  48. }
  49.  
  50. /* Elimina un elemento de la lista */
  51. void Lista_eliminar(TLista *L, TElemento e) {
  52.     TNodo *ptrRec, *ptrAnt;
  53.  
  54.     // if (Lista_estaVacia(L)) return;
  55.  
  56.     ptrRec = L->inicio;
  57.     ptrAnt = NULL;
  58.     // Buscar el elemento en la lista
  59.     while (ptrRec != NULL && ptrRec->elem != e) {
  60.         ptrAnt = ptrRec;
  61.         ptrRec = ptrRec->sig;
  62.     }
  63.  
  64.     if (ptrRec != NULL) {// Encontró el elemento a eliminar
  65.         if (ptrAnt == NULL) {// Es el primer elemento de la lista
  66.             L->inicio = L->inicio->sig;
  67.         }
  68.         if (ptrRec == L->fin) { // Es el último elemento de la lista
  69.             L->fin = ptrAnt;
  70.             if (L->fin != NULL) L->fin->sig = NULL;
  71.         } else if (ptrAnt != NULL) {
  72.             ptrAnt->sig = ptrRec->sig;
  73.         }
  74.         free(ptrRec);
  75.         (L->numElem)--;
  76.     }
  77. }
  78.  
  79. /* Obtiene el número de elementos de la lista*/
  80. int Lista_tamanho(TLista *L) {
  81.     return L->numElem;
  82. }
  83.  
  84. /* Verifica si un elemento está en la lista */
  85. int Lista_estaEnLista(TLista *L, TElemento e) {
  86.     TNodo *ptrRec = L->inicio;
  87.     while (ptrRec != NULL) {
  88.         if (ptrRec->elem == e) return 1;
  89.         ptrRec = ptrRec->sig;
  90.     }
  91.     return 0;
  92. }
  93.  
  94. /* Imprime los elementos de la lista */
  95. void Lista_imprimir(TLista *L) {
  96.     TNodo *ptrRec = L->inicio;
  97.     while (ptrRec != NULL) {
  98.         printf("%d ", ptrRec->elem);
  99.         ptrRec = ptrRec->sig;
  100.     }
  101. }
  102.    
  103. /* Inserta un elemento en una lista ordenada */
  104. void Lista_insertarEnOrden(TLista *L, TElemento nuevoElem) {
  105.     TNodo *ptrNuevo;
  106.     ptrNuevo = malloc(sizeof (TNodo));
  107.  
  108.     if (ptrNuevo) {
  109.         ptrNuevo->elem = nuevoElem;
  110.         ptrNuevo->sig = NULL;
  111.  
  112.         TNodo* ptrRec, *ptrAnt;
  113.         ptrAnt = NULL;
  114.         ptrRec = L->inicio;
  115.         // Buscar la posición en la cual debo insertar
  116.         while (ptrRec && ptrRec->elem < nuevoElem) {
  117.             ptrAnt = ptrRec;
  118.             ptrRec = ptrRec->sig;
  119.         }
  120.         if (ptrAnt == NULL)
  121.             L->inicio = ptrNuevo;
  122.         else {
  123.             ptrAnt->sig = ptrNuevo;
  124.             if (ptrAnt == L->fin) L->fin = ptrNuevo;
  125.         }
  126.         ptrNuevo->sig = ptrRec;
  127.         (L->numElem)++;
  128.     }
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement