public override T this[int index]
 {
     get
     {
         if (index >= 0 && index < _size)
         {
             Node <T> result = _first;
             for (int i = 0; i < index; i++)
             {
                 result = result.GetNext();
             }
             return(result.GetItem());
         }
         throw new IndexOutOfRangeException();
     }
     set
     {
         if (index >= 0 && index < _size)
         {
             Node <T> result = _first;
             for (int i = 0; i < index; i++)
             {
                 result = result.GetNext();
             }
             result.SetItem(value);
         }
         else
         {
             throw new IndexOutOfRangeException();
         }
     }
 }
        public override T Get()
        {
            if (_size == 0)
            {
                throw new DataStructureIsEmptyOnReadExeption("Linked List");
            }
            Node <T> result = _last;

            _last = _last.GetPrevious();
            if (_size == 1)
            {
                Clear();
            }
            else
            {
                _last.SetNext(null);
                _size--;
            }
            OnRemoveElement(new DataStructEventArgs <T>(result.GetItem()));
            return(result.GetItem());
        }
        public override T Get()
        {
            if (_count == 0)
            {
                throw new DataStructureIsEmptyOnReadExeption("RingBufferLinkedList");
            }
            T result = _first.GetItem();

            _first = _first.GetNext();
            _count--;
            OnRemoveElement(new DataStructEventArgs <T>(result));
            return(result);
        }
        public override void Add(T item)
        {
            Node <T> node = new Node <T>(item);

            if (_size == 0)
            {
                _first = node;
                _last  = node;
            }
            else
            {
                _last.SetNext(node);
                node.SetPrevious(_last);
                _last = node;
            }
            _size++;
            OnAddElement(new DataStructEventArgs <T>(node.GetItem()));
        }
        public override T Get()
        {
            if (_size == 0)
            {
                throw new DataStructureIsEmptyOnReadExeption("StackLinkedList");
            }
            T result = _first.GetItem();

            if (_size == 1)
            {
                Clear();
            }
            else
            {
                _first = _first.GetNext();
                _size--;
            }
            OnRemoveElement(new DataStructEventArgs <T>(result));
            return(result);
        }