/// <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; }
/// <summary> /// Для перебора коллекции /// </summary> public IEnumerator <T> GetEnumerator() { mListItem <T> current = this.first; //Перебор элементов while (current != null) { //Возврат текущего значения yield return(current.data); //Переход к следующему элементу current = current.next; } }
/// <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; } }
/// <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); }
/// <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); }