예제 #1
0
        public void Remove(K key)
        {
            HListNode <K, V>  Temp     = _Head;
            HListNode <K, V>  TempPrev = null;
            Func <K, K, bool> IsEqual;

            if (_Comparer == null)
            {
                IsEqual = (k1, k2) => k1.Equals(k2);
            }
            else
            {
                IsEqual = (k1, k2) => _Comparer.Equals(k1, k2);
            }

            while (!IsEqual(Temp.Key, key))
            {
                TempPrev = Temp;
                Temp     = Temp.Next;
            }

            if (Temp == null)
            {
                throw new Exception("No Key Exists");
            }

            if (TempPrev == null)
            {
                _Head = Temp.Next;
            }
            else
            {
                TempPrev.Next = Temp.Next;
            }
        }
예제 #2
0
 public void InsertFront(K key, V value)
 {
     if (this.ContainKey(key))
     {
         throw new Exception("Key already exists");
     }
     _Head = new HListNode <K, V>(key, value, _Head);
 }
예제 #3
0
        public V GetValue(K key)
        {
            if (_Head == null)
            {
                throw new Exception("Key doesn't exist");
            }

            HListNode <K, V> Temp     = _Head;
            HListNode <K, V> TempPrev = null;

            Func <K, K, bool> IsEqual;

            if (_Comparer == null)
            {
                IsEqual = (k1, k2) => k1.Equals(k2);
            }
            else
            {
                IsEqual = (k1, k2) => _Comparer.Equals(k1, k2);
            }

            while (!IsEqual(Temp.Key, key))
            {
                TempPrev = Temp;
                Temp     = Temp.Next;
                if (Temp == null)
                {
                    break;
                }
            }

            if (Temp == null)
            {
                throw new Exception("Key doesn't exist");
            }
            else
            {
                return(Temp.Value);
            }
        }
예제 #4
0
        public bool ContainKey(K key)
        {
            if (_Head == null)
            {
                return(false);
            }

            HListNode <K, V> Temp     = _Head;
            HListNode <K, V> TempPrev = null;

            Func <K, K, bool> IsEqual;

            if (_Comparer == null)
            {
                IsEqual = (k1, k2) => k1.Equals(k2);
            }
            else
            {
                IsEqual = (k1, k2) => _Comparer.Equals(k1, k2);
            }

            while (!IsEqual(Temp.Key, key))
            {
                TempPrev = Temp;
                Temp     = Temp.Next;
                if (Temp == null)
                {
                    break;
                }
            }

            if (Temp == null)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
예제 #5
0
 public HSLinkList(IEqualityComparer <K> comparer)
 {
     _Head = null;
     //_Size = 0;
     _Comparer = comparer;
 }
예제 #6
0
 public HListNode(K key, V value, HListNode <K, V> next)
 {
     this.Next  = next;
     this.Value = value;
     this.Key   = key;
 }