//Constructor
 public HashTable(int L)
 {
     start   = null;
     end     = null;
     Length  = 0;
     maxKeys = L;
 }
 //Método que verifica si existe una cable
 public bool existsKey(K key)
 {
     //Revisa solo si la tabla hash no esta vacía, si lo esta devuelve false
     if (Length > 0)
     {
         HashNode <T, K> temp = start;
         //Recorre todas las llaves hasta encontrar la que se busca, si la encuentra retorna true
         while (temp != null)
         {
             if (temp.key.CompareTo(key) == 0)
             {
                 return(true);
             }
             else
             {
                 temp = temp.next;
             }
         }
         //Si no la encuentra retorna false
         return(false);
     }
     else
     {
         return(false);
     }
 }
Exemple #3
0
        public void Add(T value, K key)
        {
            HashNode <T, K> newnode = new HashNode <T, K>();

            if (Length == 0)
            {
                newnode.key = key;
                newnode.value.InsertAtEnd(value);
                start = newnode;
                end   = newnode;
            }
            else
            {
                if (!existsKey(key))
                {
                    newnode.key = key;
                    newnode.value.InsertAtEnd(value);
                    end.next     = newnode;
                    newnode.prev = end;
                    end          = end.next;
                }
                else
                {
                    HashNode <T, K> temp = start;
                    while (temp.key.CompareTo(key) != 0)
                    {
                        temp = temp.next;
                    }
                    temp.value.InsertAtEnd(value);
                }
            }
            Length++;
        }
        public V GetValue(K _key)
        {
            HashNode <K, V> candidate = first;

            while (Comparer <K> .Default.Compare(candidate.key, _key) != 0)
            {
                candidate = candidate.NextNode;
            }
            return(candidate.value);
        }
Exemple #5
0
 private static void AddAll(IHashTable <K, V> ht, long number)
 {
     for (int i = 0; i < number; i++)
     {
         K k = (K)Convert.ChangeType(i.ToString(), typeof(K));
         V v = (V)Convert.ChangeType((i + 100).ToString(), typeof(V));
         HashNode <K, V> node = new HashNode <K, V>(k, v);
         ht.Add(node);
     }
 }
 public void Add(HashNode <K, V> node)
 {
     if (first == null)
     {
         first = node;
     }
     else
     {
         last.NextNode = node;
     }
     last = node;
 }
        public void Add(HashNode <K, V> node)
        {
            int index = GetIndexOfKey(node.key, capacity);

            if (values[index] != null)
            {
                Console.WriteLine("the <{0},{1}> is not added. Please change the key", node.key, node.value);
            }
            else
            {
                values[index] = node.value;
            }
        }
Exemple #8
0
        internal (int, string) RemoveFromStart()
        {
            if (this.head == null)
            {
                return(0, string.Empty);
            }

            var item = this.head;

            this.head = head.Next;

            return(item.Id, this.nodeMap[item.Id]);
        }
 //Devuelve un elemento en base a una funcion
 public T Get(Func <T, int> comparer, K key)
 {
     if (existsKey(key))
     {
         HashNode <T, K> temp = start;
         while (temp.key.CompareTo(key) != 0)
         {
             temp = temp.next;
         }
         return(temp.value.Find(comparer));
     }
     else
     {
         return(default);
        public V[] GetList()
        {
            V[]             arr = new V[30];
            HashNode <K, V> tmp = first;
            int             i   = 0;

            while (tmp != null)
            {
                arr[i] = tmp.value;
                tmp    = tmp.NextNode;
                i++;
            }
            return(arr);
        }
Exemple #11
0
        internal void AddAtEnd(int id, string value)
        {
            if (this.head == null)
            {
                this.head    = new HashNode(id);
                this.current = this.head;
            }
            else
            {
                this.current.Next = new HashNode(id);
                this.current      = this.current.Next;
            }

            this.nodeMap[id] = value;
        }
        public void Remove(K _key)
        {
            HashNode <K, V> candidate = first;

            if (Comparer <K> .Default.Compare(first.key, _key) == 0)
            {
                first = first.NextNode;
                return;
            }
            while (Comparer <K> .Default.Compare(candidate.NextNode.key, _key) != 0)
            {
                candidate = candidate.NextNode;
            }
            candidate.NextNode = candidate.NextNode.NextNode;
        }
        //Inserta un nuevo elemento con cierta clave
        public void Add(T value, K key)
        {
            HashNode <T, K> newnode = new HashNode <T, K>();

            //Inserta para el caso de ser el primer elemento en insertarse
            if (Length == 0)
            {
                newnode.key = key;
                newnode.value.InsertAtEnd(value);
                start = newnode;
                end   = newnode;
            }
            else
            {
                //Si no es el primer elemento, verifíca si la clave es nueva y en caso de serlo realiza la insersion para ese caso
                if (!existsKey(key))
                {
                    newnode.key = key;
                    newnode.value.InsertAtEnd(value);
                    end.next     = newnode;
                    newnode.prev = end;
                    end          = end.next;
                }
                //Si la clave ya existe, busca la llave ya creada y realiza la insersión con caso de colisión
                else
                {
                    HashNode <T, K> temp = start;
                    while (temp.key.CompareTo(key) != 0)
                    {
                        temp = temp.next;
                    }
                    //En este caso la colisión se resuelve con acumulación
                    temp.value.InsertAtEnd(value);
                }
            }
            Length++;
        }
Exemple #14
0
        public bool existsKey(K key)
        {
            if (Length > 0)
            {
                HashNode <T, K> temp = start;

                while (temp != null)
                {
                    if (temp.key.CompareTo(key) == 0)
                    {
                        return(true);
                    }
                    else
                    {
                        temp = temp.next;
                    }
                }
                return(false);
            }
            else
            {
                return(false);
            }
        }
Exemple #15
0
        public void Add(HashNode <K, V> node)
        {
            int index = GetIndexOfKey(node.key, capacity);

            bucket[index].Add(node);
        }
Exemple #16
0
 static public void Add(IHashTable <K, V> ht, HashNode <K, V> node)
 {
     ht.Add(node);
 }
 public LinkedListH()
 {
     first = null;
     last  = first;
 }