Добавить элементы в двусвязный список без использования коллекций - C#
Формулировка задачи:
Добрый день.
Как можно добавить элементы в двусвязный список без использования коллекций?
Решение задачи: «Добавить элементы в двусвязный список без использования коллекций»
textual
Листинг программы
using System; namespace Interface { //класс элемента связного списка public sealed class ListElement<T1> { //суть - узел private ListElement<T1> PrevElement; private ListElement<T1> NextElement; private T1 DateElement; //новый элемент public ListElement(ListElement<T1> PrevElement, ListElement<T1> NextElement, T1 DateElement) { this.PrevElement = PrevElement; this.NextElement = NextElement; this.DateElement = DateElement; } //замена частей узла public ListElement<T1> GetSetNextElement { get { return this.NextElement; } set { this.NextElement = value; } } public ListElement<T1> GetSetPrevElement { get { return this.PrevElement; } set { this.PrevElement = value; } } public T1 GetSetDateElement { get { return this.DateElement; } set { this.DateElement = value; } } } class MyLinkedList <T1> { private ListElement<T1> LastElement; private ListElement<T1> FirstElement; private int count = 0; //число элементов списка public int NumberOfElements() { return count; } //добавить элемент в список public void AddElement(T1 elem) { if (FirstElement == null) { ListElement<T1> NewElement = new ListElement<T1>(null , null, elem); FirstElement = NewElement; LastElement = NewElement; } else { ListElement<T1> NewElement = new ListElement<T1>(LastElement, null, elem); LastElement.GetSetNextElement = NewElement; LastElement = NewElement; } count++; } //Добавить элемент по индексу public T1 AddToPosition(T1 elem, int index) { ListElement<T1> Last = LastElement; ListElement<T1> Next = SearchElement(index); if (index == 0) { FirstElement = new ListElement<T1>(null, null, elem); FirstElement.GetSetNextElement = Next; Next.GetSetPrevElement = FirstElement; return default(T1); } ListElement<T1> Prev = SearchElement(index - 1); ListElement<T1> NewElement = new ListElement<T1>(null, null, elem); Prev.GetSetNextElement = NewElement; NewElement.GetSetPrevElement = Prev; Next.GetSetPrevElement = NewElement; NewElement.GetSetNextElement = Next; count++; LastElement = Last; return default(T1); } //удалить элемент по индексу public T1 DeleteElement(int index) { ListElement<T1> Prev; ListElement<T1> Next; if (index == 0) { FirstElement = SearchElement(index + 1); return default(T1); } Prev = SearchElement(index-1); Next = SearchElement(index+1); Prev.GetSetNextElement = Next; Next.GetSetPrevElement = Prev; count--; return default(T1); } //прочитать элемент по индексу public T1 ReadElement(int index) { ListElement<T1> Element = SearchElement(index); return Element.GetSetDateElement; } //записать элемент по индексу public T1 WriteElement(T1 elem, int index) { ListElement<T1> Element = SearchElement(index); return Element.GetSetDateElement = elem; } //выбор направления поиска и поиск элемента public ListElement<T1> SearchElement(int index) { //присваиваю первый или последний член списка ListElement<T1> Prev = LastElement; ListElement<T1> Next = FirstElement; //Проверка на недопустимый индекс / проход с начала / конца списка. if (index > count || index < 0) { throw new IndexOutOfRangeException(); } else if (index < ((count+1) / 2)) { if (index == 0) { return FirstElement; } for (; index != 0; index--) { Next = Next.GetSetNextElement; } return Next; } else { for (; index < count; index++) { Prev = Prev.GetSetPrevElement; } return Prev; } } //очистить список public void DeleteAllElements() { FirstElement = null; count = 0; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д