Создать двунаправленный список с закрытыми членами данных и с организацией доступа к ним - C#

Узнай цену своей работы

Формулировка задачи:

Нужно создать двунаправленный список с закрытыми членами данных и с организацией доступа к ним.Так же сделать указатели на первый и следующий элемент (List<Object>-ом пользоваться нельзя, нужно создать свой список). Помогите это написать. Элементами объекта будут Name(string), Birthday(string,int), Month(int).

Решение задачи: «Создать двунаправленный список с закрытыми членами данных и с организацией доступа к ним»

textual
Листинг программы
    public class ListForLOL
    {
        //Конструкторы
        public ListForLOL()
        {
            Head = new ElementOfList();
            Tail = new ElementOfList();
            Tail.NextElem = Head;
            Head.PrevElem = Tail;
        }
        public ListForLOL(ListForLOL list)
        {
            //здесь копируешь все элементы из list в текущий список
        }
 
        //Элементы
        ElementOfList Head;
        ElementOfList Tail;
 
        public void AddHead(string n, string b, int m)
        {
            ElementOfList newEl = new ElementOfList(n, b, m);
            if(Head.PrevElem.PrevElem!=null)//Если предыдущий элемент не хвост
            {
                var pre = Head.PrevElem;
                //теперь элемент перед головой будет новый элемент
                Head.PrevElem = newEl;
                //Для того что был перед ним - новый элемент становится следующим
                pre.NextElem = newEl;
                //Для нового элемента 
                newEl.PrevElem = pre;
                newEl.NextElem = Head;
            }
            else
            {
                Tail.NextElem = newEl;
                Head.PrevElem = newEl;
                newEl.PrevElem = Tail;
                newEl.NextElem = Head;
            }
        }
 
        public void AddTail(string n, string b, int m)
        {
 
        }
 
        public void DelHead()
        {
            if(Head.PrevElem.PrevElem!=null)//если предыдущий элемент не хвост
            {
                    ElementOfList elPrevPrev = Head.PrevElem.PrevElem;
                    elPrevPrev.NextElem = Head;
                    Head.PrevElem = elPrevPrev;
                    //По сути просто убираем ссылки на этот элемент. Сборщик мусора, я думаю, сам о нём позаботится. Если кто против - поправьте
                    //Если планируется работать с большим объёмом данных, то нужно будет вызывать сборщик самостоятельно, чтобы не хламил память
                    //а для учебных целей и так сойдёт я думаю
            }
        }
 
        public void DelTail()
        {
 
        }
 
        public String GetNameFromHead()
        {
            return Head.PrevElem.data.Name;
        }
 
        //Тип элементов
        class ElementOfList
        {
            public ElementOfList() { }
            public Data data {get;set;}
            public struct Data
            {
                public string Name;
                public int Birthday;
                public int Month;
            }
            public ElementOfList NextElem {get;set;}
            public ElementOfList PrevElem {get;set;}
 
            public ElementOfList(string n, string b, int m)
            {
                data = new Data() {Name = n, Birthday = Int32.Parse(b),Month = m};
            }
            public ElementOfList(string n, int b, int m)
            {
                data = new Data() { Name = n, Birthday = b, Month = m };
            }
 
 
        }
 
    }

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


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

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

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