/// <summary> /// Чтение контейнера с заданным номером /// </summary> public SimpleListItem <T> GetItem(int number) { if ((number < 0) || (number >= this.Count)) { //Можно создать собственный класс исключения throw new Exception("Выход за границу индекса"); } SimpleListItem <T> current = this.first; int i = 0; //Пропускаем нужное количество элементов while (i < number) { //Переход к следующему элементу current = current.next; //Увеличение счетчика i++; } return(current); }
/// <summary> /// Добавление элемента /// </summary> public void Add(T element) { SimpleListItem <T> newItem = new SimpleListItem <T>(element); this.Count++; //Добавление первого элемента if (last == null) { this.first = newItem; this.last = newItem; } //Добавление следующих элементов else { //Присоединение элемента к цепочке this.last.next = newItem; //Присоединенный элемент считается последним this.last = newItem; } }
/// <summary> /// Удаление и чтение из стека /// </summary> public T Pop() { //default(T) - значение для типа T по умолчанию T Result = default(T); //Если стек пуст, возвращается значение по умолчанию для типа if (this.Count == 0) { return(Result); } //Если элемент единственный if (this.Count == 1) { //то из него читаются данныe Result = this.first.data; //обнуляются указатели начала и конца списка this.first = null; this.last = null; } //В списке более одного элемента else { //Поиск предпоследнего элемента SimpleListItem <T> newLast = this.GetItem(this.Count - 2); //Чтение значения из последнего элемента Result = newLast.next.data; //предпоследний элемент считается последним this.last = newLast; //последний элемент удаляется из списка newLast.next = null; } //Уменьшение количества элементов в списке this.Count--; //Возврат результата return(Result); }