Esempio n. 1
0
        /// <summary>
        /// Вспомогательный метод для обмена элементов при сортировке
        /// </summary>
        private void Swap(int i, int j)
        {
            mListItem <T> ci   = GetItem(i);
            mListItem <T> cj   = GetItem(j);
            T             temp = ci.data;

            ci.data = cj.data;
            cj.data = temp;
        }
Esempio n. 2
0
        /// <summary>
        /// Для перебора коллекции
        /// </summary>
        public IEnumerator <T> GetEnumerator()
        {
            mListItem <T> current = this.first;

            //Перебор элементов
            while (current != null)
            {
                //Возврат текущего значения
                yield return(current.data);

                //Переход к следующему элементу
                current = current.next;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Добавление элемента
        /// </summary>
        public void Add(T element)
        {
            mListItem <T> newItem = new mListItem <T>(element);

            this.Count++;

            //Добавление первого элемента
            if (last == null)
            {
                this.first = newItem;
                this.last  = newItem;
            }
            //Добавление следующих элементов
            else
            {
                //Присоединение элемента к цепочке
                this.last.next = newItem;
                //Просоединенный элемент считается последним
                this.last = newItem;
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Чтение контейнера с заданным номером
        /// </summary>
        public mListItem <T> GetItem(int number)
        {
            if ((number < 0) || (number >= this.Count))
            {
                //Можно создать собственный класс исключения
                throw new Exception("Выход за границу индекса");
            }

            mListItem <T> current = this.first;
            int           i       = 0;

            //Пропускаем нужное количество элементов
            while (i < number)
            {
                //Переход к следующему элементу
                current = current.next;
                //Увеличение счетчика
                i++;
            }

            return(current);
        }
Esempio n. 5
0
        /// <summary>
        /// Удаление и чтение из стека
        /// </summary>
        public T Pop()
        {
            //default(T) - значение для типа T по умолчанию
            T Result = default(T);

            //Если стек пуст, возвращается значение по умолчанию для типа
            if (this.Count == 0)
            {
                return(Result);
            }
            //Если элемент единственный
            if (this.Count == 1)
            {
                //то из него читаются данные
                Result = this.first.data;
                //обнуляются указатели начала и конца списка
                this.first = null;
                this.last  = null;
            }
            //В списке более одного элемента
            else
            {
                //Поиск предпоследнего элемента
                mListItem <T> newLast = this.GetItem(this.Count - 2);
                //Чтение значения из последнего элемента
                Result = newLast.next.data;
                //предпоследний элемент считается последним
                this.last = newLast;
                //последний элемент удаляется из списка
                newLast.next = null;
            }
            //Уменьшение количества элементов в списке
            this.Count--;
            //Возврат результата
            return(Result);
        }