コード例 #1
0
        /// <summary>
        /// Добавление элемента в начало списка
        /// </summary>
        /// <param name="val">элемент для добавления</param>
        public void AddFirst(int val)
        {
            DoublyNode newNode = new DoublyNode(val);

            if (head != null)
            {
                newNode.Next = head;
                head.Prev    = newNode;
            }
            head = newNode;
            size++;
        }
コード例 #2
0
        /// <summary>
        /// Добавить массив элементов в позицию index со сдвигом оставшихся элементов вправо
        /// </summary>
        /// <param name="index">Позиция, на которую добавляем элменты</param>
        /// <param name="values">Массив добавляемых элементов</param>
        public void AddAt(int index, int[] values)
        {
            if (index < 0 || index >= size)
            {
                throw new ArgumentException("Неверное значение index");
            }

            if (values.Length == 0)
            {
                return;
            }

            DoublyNode curentNode = head;

            for (int i = 0; i < index - 1 && curentNode.Next != null; i++)
            {
                curentNode = curentNode.Next;
            }
            DoublyNode rightPartNode;

            if (index == 0)
            {
                rightPartNode = curentNode;
                DoublyNode startLeftNode = new DoublyNode(values[0]);
                DoublyNode node          = startLeftNode;
                size++;
                for (int i = 1; i < values.Length; i++)
                {
                    DoublyNode newNode = new DoublyNode(values[i]);
                    newNode.Prev = node;
                    node.Next    = newNode;
                    node         = node.Next;
                }
                rightPartNode.Prev = node;
                node.Next          = rightPartNode;
                head = startLeftNode;
            }
            else
            {
                rightPartNode = curentNode.Next;
                for (int i = 0; i < values.Length; i++)
                {
                    DoublyNode newNode = new DoublyNode(values[i]);
                    newNode.Prev    = curentNode;
                    curentNode.Next = newNode;
                    curentNode      = curentNode.Next;
                    size++;
                }
                rightPartNode.Prev = curentNode;
                curentNode.Next    = rightPartNode;
            }
        }
コード例 #3
0
 /// <summary>
 /// Удалеие последнего элемента
 /// </summary>
 public void RemoveLast()
 {
     if (head != null)
     {
         DoublyNode curentNode = head;
         for (int i = 1; i < size - 1; i++)
         {
             curentNode = curentNode.Next;
         }
         curentNode.Next = null;
         size--;
     }
 }
コード例 #4
0
        /// <summary>
        /// Значение элемента списка по индексу index
        /// </summary>
        /// <param name="index">индекс элемента</param>
        /// <returns></returns>
        public int Get(int index)
        {
            if (index < 0 || index >= size)
            {
                throw new ArgumentException("Неверное значение index");
            }
            DoublyNode curentNode = head;

            for (int i = 0; i < index; i++)
            {
                curentNode = curentNode.Next;
            }
            return(curentNode.Value);
        }
コード例 #5
0
        /// <summary>
        /// Поменять значние элемента с указанным индексом
        /// </summary>
        /// <param name="idx">Индекс элемента</param>
        /// <param name="val">Новое значение элемента</param>
        public void Set(int idx, int val)
        {
            if (idx < 0 || idx >= size)
            {
                throw new ArgumentException("Неверное значение index");
            }
            DoublyNode curentNode = head;

            for (int i = 0; i < idx; i++)
            {
                curentNode = curentNode.Next;
            }
            curentNode.Value = val;
        }
コード例 #6
0
        /// <summary>
        /// Значение последнего элемента списка
        /// </summary>
        /// <returns>Значение последнего элемента списка</returns>
        public int GetLast()
        {
            if (size == 0)
            {
                throw new NullReferenceException("Список пуст");
            }

            DoublyNode curentNode = head;

            while (curentNode.Next != null)
            {
                curentNode = curentNode.Next;
            }

            return(curentNode.Value);
        }
コード例 #7
0
        /// <summary>
        /// Индекс первого вхождения элемента
        /// </summary>
        /// <param name="value">Элемент</param>
        /// <returns>Индекс первого вхождения элемента value или -1 если элемента нет в DoublyArrayList</returns>
        public int IndexOf(int value)
        {
            DoublyNode curentNode = head;

            for (int i = 0; i < size; i++)
            {
                if (curentNode.Value == value)
                {
                    return(i);
                }
                else
                {
                    curentNode = curentNode.Next;
                }
            }
            return(-1);
        }
コード例 #8
0
        /// <summary>
        /// Опередляет присутствует ли элемент в DoublyLinkedList
        /// </summary>
        /// <param name="value">Элемент для поиска</param>
        /// <returns>true- элемент присутствует, false - элемент отсутствует</returns>
        public bool Contains(int value)
        {
            DoublyNode curentNode = head;

            for (int i = 0; i < size; i++)
            {
                if (curentNode.Value == value)
                {
                    return(true);
                }
                else
                {
                    curentNode = curentNode.Next;
                }
            }
            return(false);
        }
コード例 #9
0
        /// <summary>
        /// Добавить значение в конец списка
        /// </summary>
        /// <param name="value">Добавляемое значение</param>
        public void AddLast(int[] values)
        {
            if (values.Length == 0)
            {
                return;
            }
            DoublyNode curentNode = head;

            if (head == null)
            {
                //список пуст,добавляем элементы с начала
                if (values.Length > 0)
                {
                    DoublyNode newNode = new DoublyNode(values[0]);
                    head = newNode;
                    size++;
                    for (int i = 1; i < values.Length; i++)
                    {
                        newNode         = new DoublyNode(values[i]);
                        newNode.Prev    = curentNode;
                        curentNode.Next = newNode;
                        curentNode      = curentNode.Next;
                        size++;
                    }
                }
            }
            else
            {
                //список не пуст-идем до конца списка
                while (curentNode.Next != null)
                {
                    curentNode = curentNode.Next;
                }
                //добавляем в конец списка
                for (int i = 0; i < values.Length; i++)
                {
                    DoublyNode newNode = new DoublyNode(values[i]);
                    newNode.Prev    = curentNode;
                    curentNode.Next = newNode;
                    curentNode      = curentNode.Next;
                    size++;
                }
            }
        }
コード例 #10
0
        /// <summary>
        /// Преобразует DoublyLinkedList в одномерный массив значений
        /// </summary>
        /// <returns>Значения DoublyLinkedList в виде одномерного массива</returns>
        public int[] ToArray()
        {
            if (size == 0)
            {
                return(new int[] { });
            }
            else
            {
                int[]      result   = new int[size];
                DoublyNode nextNode = head;
                for (int i = 0; i < result.Length; i++)
                {
                    result[i] = nextNode.Value;
                    nextNode  = nextNode.Next;
                }

                return(result);
            }
        }
コード例 #11
0
        /// <summary>
        /// Добавить значение в конец DoublyLinkedList
        /// </summary>
        /// <param name="value">Добавляемое значение</param>
        public void AddLast(int value)
        {
            DoublyNode newNode = new DoublyNode(value);

            if (head == null)//список пустой-добавляем первый элемент
            {
                head = newNode;
            }
            else
            {
                //список не пустой-надо пройтись по списку до последнего, затем добавить новый элемент
                DoublyNode curentNode = head;
                while (curentNode.Next != null)
                {
                    curentNode = curentNode.Next;
                }
                newNode.Prev    = curentNode;
                curentNode.Next = newNode;
            }
            size++;
        }
コード例 #12
0
 public DoublyLinkedList()
 {
     head = null;
     size = 0;
 }