Что такое односвязный список и как его реализовать - 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);
        }
    }
}

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


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

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

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