Создать двунаправленный список с закрытыми членами данных и с организацией доступа к ним - 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 };
}
}
}