Beispiel #1
0
        private void SetHeadAndTail(T data)
        {
            var ItemSingly = new ItemSingly <T>(data);

            Head = ItemSingly;
            Tail = ItemSingly;
            Length++;
        }
Beispiel #2
0
        public IEnumerator GetEnumerator()
        {
            ItemSingly <T> current = Head;

            while (current != null)
            {
                yield return(current.Data);

                current = current.Next;
            }
        }
Beispiel #3
0
        public T this[int index]
        {
            get
            {
                if (index + 1 > Length || index < 0)
                {
                    throw new ArgumentOutOfRangeException(nameof(index), "Индекс выходит за границы массива.\n" +
                                                          "Индекс должен быть положительным целочисленным числом " +
                                                          "и не должен выходить за пределы массива.");
                }

                T result = default(T);
                ItemSingly <T> current = Head;

                for (int i = 0; i <= index; i++)
                {
                    result = current.Data;

                    if (current.Next != null)
                    {
                        current = current.Next;
                    }
                }

                return(result);
            }
            set
            {
                if (index + 1 > Length || index < 0)
                {
                    throw new ArgumentOutOfRangeException("Индекс выходит за границы массива. " +
                                                          "Индекс должен быть положительным целочисленным числом, " +
                                                          "так же он не должен выходить за пределы массива.", nameof(index));
                }

                ItemSingly <T> current = Head;

                for (int i = 0; i <= index; i++)
                {
                    if (i == index)
                    {
                        current.Data = value;
                    }

                    if (current.Next != null)
                    {
                        current = current.Next;
                    }
                }
            }
        }
Beispiel #4
0
        public void Add(T data)
        {
            var ItemSingly = new ItemSingly <T>(data);

            if (Tail != null)
            {
                Tail.Next = ItemSingly;
                Tail      = ItemSingly;
                Length++;
            }
            else
            {
                SetHeadAndTail(data);
            }
        }
Beispiel #5
0
        public void Remove(int index)
        {
            if (index + 1 > Length || index < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(index), "Индекс выходит за границы массива.\n" +
                                                      "Индекс должен быть положительным целочисленным числом " +
                                                      "и не должен выходить за пределы массива.");
            }

            if (index == 0)
            {
                Head = Head.Next;
                Length--;
                if (Length == 0)
                {
                    Tail = null;
                }
                return;
            }

            ItemSingly <T> previous = Head;
            ItemSingly <T> current  = Head.Next;

            for (int i = 0; i <= index; i++)
            {
                if (i + 1 == index)
                {
                    previous.Next = current.Next;
                    Length--;
                    if (index == Length)
                    {
                        Tail = previous;
                    }
                    return;
                }

                previous = current;
                current  = current.Next;
            }
        }