Advertisement
pmanriquez93

TAD Listas

May 25th, 2014
529
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.42 KB | None | 0 0
  1. /*
  2.  * File:   lista.h
  3.  * Author: Pablo
  4.  *
  5.  * Created on 25 de mayo de 2014, 01:39 AM
  6.  */
  7.  
  8. #ifndef LISTA_H
  9. #define LISTA_H
  10.  
  11.  
  12. typedef int TElemento;
  13.  
  14. typedef struct nodo{
  15.     TElemento elem;
  16.     struct nodo* ptrSig;
  17. }TNodo;
  18.  
  19. typedef struct lista{
  20.     TNodo *inicio;
  21.     TNodo *fin;
  22.     int cantElem;
  23. }TLista;
  24.  
  25. void crearLista(TLista *);
  26.  
  27. void listaUnitaria(TLista *, TElemento);
  28.  
  29. void anadeIzq (TLista *, TElemento);
  30.  
  31. void anadeDer(TLista *, TElemento);
  32.  
  33. TElemento consultaIzq(TLista *);
  34.  
  35. TElemento consultaDer(TLista *);
  36.  
  37. void eliminaIzq(TLista *);
  38.  
  39. void eliminarDer(TLista *);
  40.  
  41. int esVacia(TLista *);
  42.  
  43. TLista concatenaListas(TLista *,TLista *);
  44.  
  45. int longitudLista(TLista *);
  46.  
  47. #endif  /* LISTA_H */
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55. #include <stdio.h>
  56. #include <stdlib.h>
  57. #include "lista.h"
  58.  
  59.  
  60. void crearLista(TLista *lista){
  61.     lista->inicio = NULL;
  62.     lista->fin = NULL;
  63.     lista->cantElem = 0;
  64. }
  65.  
  66. void listaUnitaria(TLista *lista, TElemento elem){
  67.     TNodo *ptrNuevo;
  68.    
  69.     ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
  70.     ptrNuevo->elem = elem;
  71.     ptrNuevo->ptrSig = NULL;
  72.    
  73.     lista->inicio = ptrNuevo;
  74.     lista->fin = ptrNuevo;
  75.     lista->cantElem = 1;
  76. }
  77.  
  78. void anadeIze(TLista *lista, TElemento elem){
  79.     TNodo *ptrNuevo;
  80.    
  81.     ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
  82.     ptrNuevo->elem = elem;
  83.     ptrNuevo->ptrSig = NULL;
  84.    
  85.     if (lista->inicio == NULL){
  86.         listaUnitaria(lista,elem);
  87.     }else{
  88.         ptrNuevo->ptrSig = lista->inicio;
  89.         lista->inicio = ptrNuevo;
  90.     }
  91.     (lista->cantElem)++;
  92. }
  93.  
  94. void anadeDer(TLista *lista, TElemento elem){
  95.     TNodo *ptrNuevo;
  96.    
  97.     ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
  98.     ptrNuevo->elem = elem;
  99.     ptrNuevo->ptrSig = NULL;
  100.    
  101.     if (lista->inicio == NULL){
  102.         listaUnitaria(lista,elem);
  103.     }else{
  104.         lista->fin->ptrSig = ptrNuevo;
  105.         lista->fin = ptrNuevo;
  106.     }
  107.     (lista->cantElem)++;
  108. }
  109.  
  110. TElemento consultaIzq(TLista *lista){
  111.     return (lista->inicio->elem);
  112.     // Si no hay nada, devolverá nulo.
  113. }
  114.  
  115. TElemento consultaDer(TLista *lista){
  116.     return (lista->fin->elem);
  117.     // Si no hay nada, devolverá nulo.
  118. }
  119.  
  120. void eliminaIzq(TLista *lista){
  121.     TNodo *ptrEliminar;
  122.    
  123.     if (lista->inicio != NULL){   // No se puede eliminar de una lista vacia
  124.         ptrEliminar = lista->inicio;
  125.         lista->inicio = lista->inicio->ptrSig;
  126.         free(ptrEliminar);
  127.         (lista->cantElem)--;  
  128.     }
  129. }
  130.  
  131. void eliminaDer(TLista *lista){
  132.     TNodo *ptrEliminar, *ptrRec;
  133.    
  134.     ptrRec = lista->inicio;
  135.     ptrEliminar = lista->fin;
  136.    
  137.     while (ptrRec->ptrSig->ptrSig != NULL){
  138.         ptrRec = ptrRec->ptrSig;
  139.     }
  140.    
  141.     lista->fin = ptrRec;
  142.     ptrRec->ptrSig = NULL;
  143.     free(ptrEliminar);
  144.    
  145.     (lista->cantElem)--;
  146. }
  147.  
  148. int esVacia(TLista * lista){
  149.     return(lista->cantElem == 0);
  150. }
  151.  
  152. TLista concatenaLista(TLista *lista1 , TLista *lista2){
  153.     TLista listaConcat;  
  154.     crearLista(&listaConcat);
  155.            
  156.     TNodo *ptrRec1, *ptrRec2;
  157.     ptrRec1 = lista1->inicio;
  158.     ptrRec2 = lista2->inicio;
  159.    
  160.     while(ptrRec1 != NULL){
  161.         anadeDer(&listaConcat,ptrRec1->elem);
  162.         ptrRec1 = ptrRec1->ptrSig;
  163.     }
  164.     while(ptrRec2 != NULL){
  165.         anadeDer(&listaConcat,ptrRec2->elem);
  166.         ptrRec2 = ptrRec2->ptrSig;
  167.     }
  168.    
  169.     return listaConcat;
  170. }
  171.  
  172. int longitudLista(TLista *lista){
  173.     return (lista->cantElem);
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement