Добавить элементы в двусвязный список без использования коллекций - 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;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы