Создать двунаправленный список с закрытыми членами данных и с организацией доступа к ним - 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 };
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д