karlangadas

Conjuntos implementacion

Oct 23rd, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.84 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "lista.h"
  4.  
  5. void CrearConjuntoVacio(TLista *L){
  6.     L->inicio = NULL;
  7.     L->fin = NULL;
  8.     L->numElem = 0;
  9. }
  10.  
  11. int Conjunto_EstaVacio(TLista L){
  12.     return (L.numElem==0);
  13. }
  14.  
  15. void Insertar(TLista *L, TElemento nuevoElem) {
  16.     //Ete es el insertar en orden
  17.     TNodo *ptrNuevo;
  18.     ptrNuevo = malloc(sizeof (TNodo));
  19.     //La diferencia esta en que aquí no volveremos a agregar los elem
  20.     //que ya están en el conjunto
  21.     if (ptrNuevo && !Miembro(*L,nuevoElem)) {
  22.         ptrNuevo->elem = nuevoElem;
  23.         ptrNuevo->sig = NULL;
  24.  
  25.         TNodo* ptrRec, *ptrAnt;
  26.         ptrAnt = NULL;
  27.         ptrRec = L->inicio;
  28.         // Buscar la posición en la cual debo insertar
  29.         while (ptrRec && ptrRec->elem < nuevoElem) {
  30.             ptrAnt = ptrRec;
  31.             ptrRec = ptrRec->sig;
  32.         }
  33.         if (ptrAnt == NULL)
  34.             L->inicio = ptrNuevo;
  35.         else {
  36.             ptrAnt->sig = ptrNuevo;
  37.             if (ptrAnt == L->fin) L->fin = ptrNuevo;
  38.         }
  39.         ptrNuevo->sig = ptrRec;
  40.         (L->numElem)++;
  41.     }
  42. }
  43. void Remover(TLista *L, TElemento e){
  44.     if (!Conjunto_EstaVacio(*L)){
  45.         TNodo *crtNodo = L->inicio;
  46.         TNodo *nodoAnt = NULL;
  47.         while (crtNodo!=NULL){
  48.             if (crtNodo->elem == e)
  49.                 break;
  50.             nodoAnt=crtNodo;
  51.             crtNodo=crtNodo->sig;
  52.         }
  53.         if (crtNodo!=NULL){
  54.             if (nodoAnt == NULL){
  55.                 L->inicio= L->inicio->sig;
  56.             }
  57.             if (crtNodo->sig == NULL){
  58.                 L->fin = nodoAnt;
  59.                 nodoAnt->sig= NULL;
  60.             }
  61.             else{
  62.                 if (nodoAnt != NULL)
  63.                     nodoAnt->sig=crtNodo->sig;
  64.             }
  65.             free(crtNodo);
  66.             (L->numElem)--;
  67.         }
  68.     }
  69. }
  70.  
  71. int Conjunto_Tamanho(TLista L){
  72.     return (L.numElem);
  73. }
  74. int Miembro(TLista L, TElemento e){
  75.     TNodo *crtNodo= L.inicio;
  76.     while(crtNodo!=NULL && crtNodo->elem != e)
  77.         crtNodo=crtNodo->sig;
  78.     return (crtNodo!=NULL);
  79. }
  80.  
  81. void Conjunto_Imprimir(TLista L){
  82.     if (!Conjunto_EstaVacio(L)){
  83.         TNodo *crtNodo=L.inicio;
  84.         while (crtNodo!=NULL){
  85.             printf("%d\n",crtNodo->elem);
  86.             crtNodo=crtNodo->sig;
  87.         }
  88.     }
  89. }
  90.  
  91. void Interseccion(TConjunto A,TConjunto B,TConjunto *C){
  92.     TNodo *crtNodoA=A.inicio;
  93.     TNodo *crtNodoB=B.inicio;
  94.  
  95.     while(crtNodoA!=NULL && crtNodoB!=NULL){
  96.         if (crtNodoA->elem==crtNodoB->elem){
  97.             Insertar(C,crtNodoA->elem);
  98.             crtNodoA=crtNodoA->sig;
  99.             crtNodoB=crtNodoB->sig;
  100.         }
  101.         else{
  102.             if (crtNodoA->elem>crtNodoB->elem){
  103.                 crtNodoB=crtNodoB->sig;    
  104.             }
  105.             else{
  106.                 crtNodoA=crtNodoA->sig;
  107.             }
  108.         }
  109.     }
  110.  
  111. }
  112. void Union(TConjunto A,TConjunto B,TConjunto *C){
  113.     TNodo *crtNodoA=A.inicio;
  114.     TNodo *crtNodoB=B.inicio;
  115.  
  116.     while(crtNodoA!=NULL && crtNodoB!=NULL){
  117.         if (crtNodoA->elem==crtNodoB->elem){
  118.             Insertar(C,crtNodoA->elem);
  119.             crtNodoA=crtNodoA->sig;
  120.             crtNodoB=crtNodoB->sig;
  121.         }
  122.         else{
  123.             if (crtNodoA->elem>crtNodoB->elem){
  124.                 Insertar(C,crtNodoB->elem);
  125.                 crtNodoB=crtNodoB->sig;    
  126.             }
  127.             else{
  128.                 Insertar(C,crtNodoA->elem);
  129.                 crtNodoA=crtNodoA->sig;
  130.             }
  131.         }
  132.     }
  133.     if (crtNodoA==NULL && crtNodoB!=NULL){
  134.         while(crtNodoB!=NULL){
  135.             Insertar(C,crtNodoB->elem);
  136.             crtNodoB=crtNodoB->sig;
  137.         }
  138.     }
  139.     if (crtNodoA!=NULL && crtNodoB==NULL){
  140.         while(crtNodoA!=NULL){
  141.             Insertar(C,crtNodoA->elem);
  142.             crtNodoA=crtNodoA->sig;
  143.         }
  144.     }
  145.  
  146. }
  147.  
  148. void Diferencia(TConjunto A,TConjunto B,TConjunto *C){
  149.     TNodo *crtNodoA=A.inicio;
  150.     TNodo *crtNodoB=B.inicio;
  151.  
  152.     while(crtNodoA!=NULL && crtNodoB!=NULL){
  153.         if (crtNodoA->elem==crtNodoB->elem){
  154.             crtNodoA=crtNodoA->sig;
  155.             crtNodoB=crtNodoB->sig;
  156.         }
  157.         else{
  158.             if (crtNodoA->elem>crtNodoB->elem){
  159.                 crtNodoB=crtNodoB->sig;    
  160.             }
  161.             else{
  162.                 Insertar(C,crtNodoA->elem);
  163.                 crtNodoA=crtNodoA->sig;
  164.             }
  165.         }
  166.     }
  167.     if (crtNodoB==NULL){
  168.         while(crtNodoA!=NULL){
  169.             Insertar(C,crtNodoA->elem);
  170.             crtNodoA=crtNodoA->sig;
  171.         }
  172.     }
  173.  
  174. }
  175.  
  176. int Min(TConjunto A){
  177.     TNodo *crtNodo=A.inicio;
  178.     int min;
  179.     while(crtNodo!=NULL){
  180.         if (crtNodo==A.inicio){
  181.             min=crtNodo->elem;
  182.         }
  183.         else{
  184.             if (crtNodo->elem<min)
  185.                 min=crtNodo->elem;
  186.         }
  187.         crtNodo=crtNodo->sig;
  188.     }
  189.     return min;
  190. }
  191.  
  192. int Max(TConjunto A){
  193.     TNodo *crtNodo=A.inicio;
  194.     int max;
  195.     while(crtNodo!=NULL){
  196.         if (crtNodo==A.inicio){
  197.             max=crtNodo->elem;
  198.         }
  199.         else{
  200.             if (crtNodo->elem>max)
  201.                 max=crtNodo->elem;
  202.         }
  203.         crtNodo=crtNodo->sig;
  204.     }
  205.     return max;
  206.  
  207. }
  208.  
  209. int Igual(TConjunto A,TConjunto B){
  210.     TNodo *crtNodoA=A.inicio;
  211.     TNodo *crtNodoB=B.inicio;
  212.  
  213.     while(crtNodoA!=NULL && crtNodoB!=NULL){
  214.         if (crtNodoA->elem!=crtNodoB->elem)
  215.             return 0;
  216.         crtNodoA=crtNodoA->sig;
  217.         crtNodoB=crtNodoB->sig;
  218.     }
  219.     if (crtNodoA==NULL && crtNodoB==NULL)
  220.         return 1;
  221.     return 0;
  222. }
Advertisement
Add Comment
Please, Sign In to add comment