public void Agregar(int clave, int valor)
        {
            NodoClave nc = Clave2NodoClave(clave);

            if (nc == null)
            {
                nc = new NodoClave();
            }
            nc.clave    = clave;
            nc.sigClave = origen;
            origen      = nc;

            NodoValor aux = nc.valores;

            while (aux != null && aux.valor != valor)
            {
                aux = aux.sigValor;
            }
            if (aux == null)
            {
                NodoValor nv = new NodoValor();
                nv.valor    = valor;
                nv.sigValor = nc.valores;
                nc.valores  = nv;
            }
        }
 public void EliminarValor(int clave, int valor)
 {
     if (origen != null)
     {
         if (origen.clave == clave)
         {
             EliminarValorEnNodo(origen, valor);
             if (origen.valores == null)
             {
                 origen = origen.sigClave;
             }
         }
         else
         {
             NodoClave aux = origen;
             while (aux.sigClave != null && aux.sigClave.clave
                    != clave)
             {
                 aux = aux.sigClave;
             }
             if (aux.sigClave != null)
             {
                 EliminarValorEnNodo(aux.sigClave, valor);
                 if (aux.sigClave.valores == null)
                 {
                     aux.sigClave = aux.sigClave.sigClave;
                 }
             }
         }
     }
 }
        private NodoClave Clave2NodoClave(int clave)
        {
            NodoClave aux = origen;

            while (aux != null && aux.clave != clave)
            {
                aux = aux.sigClave;
            }
            return(aux);
        }
        public Conjunto Claves()
        {
            Conjunto c = new Conjunto();

            c.InicializarConjunto();
            NodoClave aux = origen;

            while (aux != null)
            {
                c.Agregar(aux.clave);
                aux = aux.sigClave;
            }
            return(c);
        }
        public Conjunto Recuperar(int clave)
        {
            NodoClave n = Clave2NodoClave(clave);
            Conjunto  c = new Conjunto();

            c.InicializarConjunto();
            if (n != null)
            {
                NodoValor aux = n.valores;
                while (aux != null)
                {
                    c.Agregar(aux.valor);
                    aux = aux.sigValor;
                }
            }
            return(c);
        }
 private void EliminarValorEnNodo(NodoClave nodo, int valor)
 {
     if (nodo.valores != null)
     {
         if (nodo.valores.valor == valor)
         {
             nodo.valores = nodo.valores.sigValor;
         }
         else
         {
             NodoValor aux = nodo.valores;
             while (aux.sigValor != null && aux.sigValor.valor
                    != valor)
             {
                 aux = aux.sigValor;
             }
             if (aux.sigValor != null)
             {
                 aux.sigValor = aux.sigValor.sigValor;
             }
         }
     }
 }
 public void Eliminar(int clave)
 {
     if (origen != null)
     {
         if (origen.clave == clave)
         {
             origen = origen.sigClave;
         }
         else
         {
             NodoClave aux = origen;
             while (aux.sigClave != null && aux.sigClave.clave
                    != clave)
             {
                 aux = aux.sigClave;
             }
             if (aux.sigClave != null)
             {
                 aux.sigClave = aux.sigClave.sigClave;
             }
         }
     }
 }
 public void InicializarDiccionario()
 {
     origen = null;
 }