Что такое односвязный список и как его реализовать - C#
Формулировка задачи:
Господа, что такое односвязный список и как его реализовать в шарпе.
Всем спасибо
Решение задачи: «Что такое односвязный список и как его реализовать»
textual
Листинг программы
namespace ConsoleApplication6 { class Program { static void Main(string[] args) { SinglyLinkedList<string> l = new SinglyLinkedList<string>(); SinglyLinkedNode<string> first = new SinglyLinkedNode<string>() { Value = "11111111" }; l.AddFirstNode(first); l.AddFirstNode(new SinglyLinkedNode<string>() { Value = "22222222" }); l.AddFirstNode(new SinglyLinkedNode<string>() { Value = "33333333" }); l.AddLastNode(new SinglyLinkedNode<string>() { Value = "44444444" }); l.AddLastNode(new SinglyLinkedNode<string>() { Value = "55555555" }); l.AddLastNode(first); l.AddAfter(0, new SinglyLinkedNode<string>() { Value = "after" }); l.AddAfter(6, new SinglyLinkedNode<string>() { Value = "after" }); foreach (SinglyLinkedNode<string> node in l) Console.WriteLine(node.Value); Console.ReadKey(); } } public class SinglyLinkedNode<T> where T : class { SinglyLinkedNode<T> nextNode; public SinglyLinkedNode<T> NextNode { get { return nextNode; } set { nextNode = value; } } public T Value { get; set; } public void AddAfter(SinglyLinkedNode<T> node) { if (node != null) { SinglyLinkedNode<T> currentNext = nextNode; nextNode = node; if (currentNext != null) node.AddAfter(currentNext); } } } public class SinglyLinkedNodeEnumerator<T> : IEnumerator where T : class { readonly SinglyLinkedNode<T> firstNode; SinglyLinkedNode<T> current; public SinglyLinkedNodeEnumerator(SinglyLinkedNode<T> firstNode) { this.firstNode = current = firstNode; } public object Current { get { SinglyLinkedNode<T> befor = current; current = current.NextNode; return befor; } } public bool MoveNext() { return current != null; } public void Reset() { current = firstNode; } } public class SinglyLinkedList<T> : IEnumerable where T : class { SinglyLinkedNode<T> firstNode; SinglyLinkedNode<T> lastNode; public SinglyLinkedNode<T> FirstNode { get { return firstNode; } } public SinglyLinkedNode<T> LastNode { get { return lastNode; } } public SinglyLinkedList() { } public SinglyLinkedList(SinglyLinkedNode<T> node) { if (node != null) firstNode = lastNode = node; } public void AddFirstNode(SinglyLinkedNode<T> node) { node.NextNode = firstNode; firstNode = node; if (lastNode == null) lastNode = node; } public void AddLastNode(SinglyLinkedNode<T> node) { lastNode.NextNode = node; lastNode = node; if (firstNode == null) firstNode = node; } public void AddAfter(int index, SinglyLinkedNode<T> node) { SinglyLinkedNode<T> currentNode = firstNode; for (int idx = 0; idx < index; idx++) if (currentNode != null) currentNode = currentNode.NextNode; if (currentNode != null) currentNode.AddAfter(node); } public IEnumerator GetEnumerator() { return new SinglyLinkedNodeEnumerator<T>(firstNode); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д