Advertisement
rsvaco

prg pract 5 conjuntostring

Jun 4th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.61 KB | None | 0 0
  1. /**
  2.  * Clase ConjuntoString. Implementacion de un
  3.  * conjunto de String mediante una secuencia
  4.  * enlazada ordenada lexicograficamente.
  5.  *
  6.  * @author (PRG. ETSINF. UPV)
  7.  * @version (Curso 2016/17)
  8.  */
  9. public class ConjuntoString {
  10.    
  11.     private NodoString primero;
  12.     private int talla;
  13.    
  14.     /**
  15.      * Crea un conjunto vacio.
  16.      */
  17.     public ConjuntoString() {
  18.         primero = null;
  19.         talla = 0;
  20.     }
  21.  
  22.     /**
  23.      * Inserta s en el conjunto.
  24.      * Si s ya pertenece al conjunto, el conjunto no cambia.
  25.      *
  26.      * @param s String. Elemento que se inserta en el conjunto.
  27.      */
  28.     public void insertar(String s) {
  29.         NodoString aux = primero,
  30.                    ant = null;
  31.         int a = -1;
  32.         while(aux != null && a < 0 ) {
  33.             a = aux.dato.compareTo(s);
  34.             if (a < 0) {
  35.                 ant = aux;
  36.                 aux = aux.siguiente;
  37.             }
  38.         }
  39.         if (a != 0) {
  40.             talla++;
  41.             if(aux == primero) { primero = new NodoString(s, primero); }
  42.             else ant.siguiente = new NodoString(s, aux);
  43.         }
  44.     }
  45.    
  46.     /**
  47.      * Comprueba si s pertenece al conjunto.
  48.      *
  49.      * @param s String.
  50.      * @return true sii s pertenece al conjunto.
  51.      */
  52.     public boolean pertenece(String s) {
  53.         NodoString aux = this.primero;
  54.         boolean parar = false;
  55.         while(aux != null && !parar) {
  56.             parar = aux.dato.compareTo(s) >= 0;
  57.             if(aux.dato.compareTo(s) == 0) { parar = true; }
  58.             else aux = aux.siguiente;
  59.         }
  60.         if(aux == null) { return false; }
  61.         else return aux.dato.equals(s);
  62.     }
  63.    
  64.  
  65.    
  66.     /**
  67.      * Elimina s del conjunto.
  68.      * Si s no pertenece al conjunto, el conjunto no cambia.
  69.      *
  70.      * @param s String.
  71.      */
  72.     public void eliminar(String s) {
  73.         NodoString aux = primero,
  74.                    ant = null;
  75.         int a = -1;
  76.         while(aux != null && a < 0 ) {
  77.             a = aux.dato.compareTo(s);
  78.             if (a < 0) {
  79.                 ant = aux;
  80.                 aux = aux.siguiente;
  81.             }
  82.         }
  83.         if (a == 0) {
  84.             talla--;
  85.             if(aux == primero) {
  86.                 primero = primero.siguiente;
  87.             }
  88.             else ant.siguiente = aux.siguiente;
  89.         }
  90.     }
  91.    
  92.     /**
  93.      * Devuelve la talla o cardinal del conjunto.
  94.      * @return la talla del conjunto.
  95.      */
  96.     public int talla() {    
  97.         return talla;
  98.     }
  99.    
  100.    
  101.     /**
  102.      * Devuelve el conjunto interseccion del conjunto y de otro.
  103.      *
  104.      * @param otro ConjuntoString.
  105.      * @return el conjunto interseccion.
  106.      */
  107.     public ConjuntoString interseccion(ConjuntoString otro) {
  108.         ConjuntoString result = new ConjuntoString();
  109.         NodoString aux1 = this.primero,
  110.                    aux2 = otro.primero,
  111.                    ultResult = null;
  112.                    result.primero = null;
  113.         result.talla = 0;
  114.         while(result.primero == null && aux1 != null && aux2 != null) {
  115.             if(aux1.dato.compareTo(aux2.dato) == 0){
  116.                 result.primero = new NodoString(aux1.dato);
  117.                 ultResult = result.primero;
  118.                 result.talla++;
  119.                 aux1 = aux1.siguiente;
  120.                 aux2 = aux2.siguiente;
  121.             } else if (aux1.dato.compareTo(aux2.dato) < 0) {
  122.                 aux1 = aux1.siguiente;
  123.             } else if (aux1.dato.compareTo(aux2.dato) > 0) {
  124.                 aux2 = aux2.siguiente;
  125.             }
  126.         }
  127.        
  128.         while(aux1 != null && aux2 != null){
  129.             if(aux1.dato == aux2.dato){
  130.                 ultResult.siguiente = new NodoString(aux1.dato);
  131.                 ultResult = ultResult.siguiente;
  132.                 result.talla++;
  133.                 aux1 = aux1.siguiente;
  134.                 aux2 = aux2.siguiente;
  135.             } else if (aux1.dato.compareTo(aux2.dato) < 0) {
  136.                 aux1 = aux1.siguiente;
  137.             } else if (aux1.dato.compareTo(aux2.dato) > 0) {
  138.                 aux2 = aux2.siguiente;
  139.             }
  140.         }
  141.                  
  142.         return result;
  143.     }
  144.    
  145.     /**
  146.      * Devuelve el conjunto union del conjunto y de otro.
  147.      *
  148.      * @param otro ConjuntoString.
  149.      * @return el conjunto union.
  150.      */
  151.     public ConjuntoString union(ConjuntoString otro) {
  152.         ConjuntoString result = new ConjuntoString();
  153.         NodoString aux1 = this.primero,
  154.                    aux2 = otro.primero,
  155.                    ultResult = null;
  156.                    result.primero = null;
  157.         result.talla = 0;
  158.         while(result.primero == null) {
  159.             if(aux1 != null && aux2 != null && aux1.dato.compareTo(aux2.dato) == 0){
  160.                 result.primero = new NodoString(aux1.dato);
  161.                 ultResult = result.primero;
  162.                 result.talla++;
  163.                 aux1 = aux1.siguiente;
  164.                 aux2 = aux2.siguiente;
  165.             } else if (aux2 == null || aux1.dato.compareTo(aux2.dato) < 0) {
  166.                 result.primero = new NodoString(aux1.dato);
  167.                 ultResult = result.primero;
  168.                 result.talla++;
  169.                 aux1 = aux1.siguiente;
  170.             } else if (aux1 == null || aux1.dato.compareTo(aux2.dato) > 0) {
  171.                 result.primero = new NodoString(aux2.dato);
  172.                 ultResult = result.primero;
  173.                 result.talla++;
  174.                 aux2 = aux2.siguiente;
  175.             }
  176.         }
  177.        
  178.         while(aux1 != null && aux2 != null){
  179.             if(aux1.dato == aux2.dato){
  180.                 ultResult.siguiente = new NodoString(aux1.dato);
  181.                 ultResult = ultResult.siguiente;
  182.                 result.talla++;
  183.                 aux1 = aux1.siguiente;
  184.                 aux2 = aux2.siguiente;
  185.             } else if (aux1.dato.compareTo(aux2.dato) < 0) {
  186.                 ultResult.siguiente = new NodoString(aux1.dato);
  187.                 ultResult = ultResult.siguiente;
  188.                 result.talla++;
  189.                 aux1 = aux1.siguiente;                
  190.             } else if (aux1.dato.compareTo(aux2.dato) > 0) {
  191.                 ultResult.siguiente = new NodoString(aux2.dato);
  192.                 ultResult = ultResult.siguiente;
  193.                 result.talla++;
  194.                 aux2 = aux2.siguiente;
  195.             }
  196.         }
  197.        
  198.         if(aux1 == null && aux2 != null && ultResult != null){
  199.             while (aux2 != null) {
  200.                 ultResult.siguiente = new NodoString(aux2.dato);
  201.                 ultResult = ultResult.siguiente;
  202.                 result.talla++;
  203.                 aux2 = aux2.siguiente;
  204.             }
  205.         }
  206.         //falta si ultresult es null pero aun queda una cola con elementos
  207.         if(aux2 == null && aux1 != null && ultResult != null){
  208.            
  209.             while (aux1 != null) {
  210.                 ultResult.siguiente = new NodoString(aux1.dato);
  211.                 ultResult = ultResult.siguiente;
  212.                 result.talla++;
  213.                 aux1 = aux1.siguiente;
  214.             }            
  215.         }
  216.         return result;
  217.    
  218.     }
  219.    
  220.        
  221.     /**
  222.      * Devuelve el listado de los Strings en el conjunto, en orden
  223.      * lexicográfico, y separados por saltos de linea.
  224.      * Si el conjunto es vacio devuelve "", la String vacia.
  225.      *
  226.      * @return el listado de los elementos del conjunto.
  227.      */
  228.     public String toString() {
  229.         String result = "";
  230.         NodoString aux = this.primero;
  231.         while (aux != null) {
  232.             result += aux.dato + "\n";
  233.             aux = aux.siguiente;
  234.         }
  235.         return result;
  236.     }
  237.    
  238. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement