예제 #1
0
        public void OrdenarCola(Queue <nodoColaPrioridad <T> > cola)
        {
            int o = 0;

            nodoColaPrioridad <T>[] vector = new nodoColaPrioridad <T> [cola.Count];
            for (int i = 0; cola.Count != 0; i++)
            {
                vector[i] = cola.Dequeue();
                o++;
            }
            for (int i = 0; i < vector.Length; i++)
            {
                for (int j = i + 1; j < vector.Length; j++)
                {
                    if (vector[j].valor.frecuencia < vector[i].valor.frecuencia)
                    {
                        nodoColaPrioridad <T> aux = new nodoColaPrioridad <T>();
                        aux       = vector[i];
                        vector[i] = vector[j];
                        vector[j] = aux;
                    }
                }
            }
            for (int i = 0; i < o; i++)
            {
                cola.Enqueue(vector[i]);
            }
        }
예제 #2
0
 public void crearArbol(Queue <nodoColaPrioridad <T> > cola)
 {
     while (cola.Count > 1)
     {
         nodoColaPrioridad <T> aux   = new nodoColaPrioridad <T>();
         nodoColaPrioridad <T> nuevo = new nodoColaPrioridad <T>();
         aux   = cola.Dequeue();
         nuevo = crearNodo(aux, cola.Dequeue());
         cola.Enqueue(nuevo);
         OrdenarCola(cola);
         crearArbol(cola);
     }
     if (cola.Count == 1)
     {
         head = cola.Dequeue();
     }
 }
예제 #3
0
        public void ObtenerTablaGeneral()
        {
            pila.Clear();
            prefijos.Clear();


            foreach (var item in diccionario)
            {
                Valor val = new Valor();
                nodoColaPrioridad <T> nuevo = new nodoColaPrioridad <T>();
                nuevo.valor            = val;
                nuevo.valor.frecuencia = item.Value;
                nuevo.valor.letra      = item.Key;
                pila.Enqueue(nuevo);
            }
            OrdenarCola(pila);
            crearArbol(pila);
            asignarPrefijos(head);
        }
예제 #4
0
        public nodoColaPrioridad <T> crearNodo(nodoColaPrioridad <T> n1, nodoColaPrioridad <T> n2)
        {
            nodoColaPrioridad <T> nuevo = new nodoColaPrioridad <T>();
            Valor val = new Valor();

            nuevo.valor            = val;
            nuevo.valor.frecuencia = n1.valor.frecuencia + n2.valor.frecuencia;
            nuevo.valor.letra      = 0;
            n1.padre = nuevo;
            n2.padre = nuevo;
            if (n1.valor.frecuencia > n2.valor.frecuencia)
            {
                nuevo.hijoDer = n2;
                nuevo.hijoIzq = n1;
            }
            else
            {
                nuevo.hijoDer = n1;
                nuevo.hijoIzq = n2;
            }
            return(nuevo);
        }
예제 #5
0
 public void asignarPrefijos(nodoColaPrioridad <T> raiz)
 {
     if (raiz == head)
     {
         if (head.hijoIzq != null && head.hijoDer != null)
         {
             raiz.hijoIzq.prefijo = "0";
             raiz.hijoDer.prefijo = "1";
             if (raiz.hijoIzq.valor.letra != 0)
             {
                 if (!prefijos.ContainsKey(raiz.hijoIzq.valor.letra))
                 {
                     prefijos.Add(raiz.hijoIzq.valor.letra, raiz.hijoIzq.prefijo);
                 }
             }
             if (raiz.hijoDer.valor.letra != 0)
             {
                 if (!prefijos.ContainsKey(raiz.hijoDer.valor.letra))
                 {
                     prefijos.Add(raiz.hijoDer.valor.letra, raiz.hijoDer.prefijo);
                 }
             }
             asignarPrefijos(raiz.hijoDer);
             asignarPrefijos(raiz.hijoIzq);
         }
         if (head.hijoIzq != null && head.hijoDer == null)
         {
             raiz.hijoIzq.prefijo = "0";
             if (raiz.hijoIzq.valor.letra != 0)
             {
                 if (!prefijos.ContainsKey(raiz.hijoIzq.valor.letra))
                 {
                     prefijos.Add(raiz.hijoIzq.valor.letra, raiz.hijoIzq.prefijo);
                 }
             }
             asignarPrefijos(raiz.hijoIzq);
         }
         if (head.hijoIzq == null && head.hijoDer != null)
         {
             raiz.hijoDer.prefijo = "1";
             if (raiz.hijoDer.valor.letra != 0)
             {
                 if (!prefijos.ContainsKey(raiz.hijoDer.valor.letra))
                 {
                     prefijos.Add(raiz.hijoDer.valor.letra, raiz.hijoDer.prefijo);
                 }
             }
             asignarPrefijos(raiz.hijoDer);
         }
     }
     else
     {
         if (raiz.hijoDer != null && raiz.hijoIzq != null)
         {
             raiz.hijoDer.prefijo = raiz.prefijo + "1";
             raiz.hijoIzq.prefijo = raiz.prefijo + "0";
             if (raiz.hijoIzq.valor.letra != 0)
             {
                 if (!prefijos.ContainsKey(raiz.hijoIzq.valor.letra))
                 {
                     prefijos.Add(raiz.hijoIzq.valor.letra, raiz.hijoIzq.prefijo);
                 }
             }
             if (raiz.hijoDer.valor.letra != 0)
             {
                 if (!prefijos.ContainsKey(raiz.hijoDer.valor.letra))
                 {
                     prefijos.Add(raiz.hijoDer.valor.letra, raiz.hijoDer.prefijo);
                 }
             }
             asignarPrefijos(raiz.hijoDer);
             asignarPrefijos(raiz.hijoIzq);
         }
         if (raiz.hijoDer != null && raiz.hijoIzq == null)
         {
             raiz.hijoDer.prefijo = raiz.prefijo + "1";
             if (raiz.hijoDer.valor.letra != 0)
             {
                 if (!prefijos.ContainsKey(raiz.hijoDer.valor.letra))
                 {
                     prefijos.Add(raiz.hijoDer.valor.letra, raiz.hijoDer.prefijo);
                 }
             }
             asignarPrefijos(raiz.hijoDer);
         }
         if (raiz.hijoDer == null && raiz.hijoIzq != null)
         {
             raiz.hijoIzq.prefijo = raiz.prefijo + "0";
             if (raiz.hijoIzq.valor.letra != 0)
             {
                 if (!prefijos.ContainsKey(raiz.hijoIzq.valor.letra))
                 {
                     prefijos.Add(raiz.hijoIzq.valor.letra, raiz.hijoIzq.prefijo);
                 }
             }
             asignarPrefijos(raiz.hijoIzq);
         }
     }
 }