Связанный список представил .Net Framework 4. В C# LinkedList — это универсальный тип коллекции, определенный в пространстве имен System.Collections.Generic. Связанный список — это линейная структура данных, в которой элементы хранятся в виде узла. LinkedList состоит из узлов, где каждый узел содержит данные и ссылку на следующий узел в списке. Каждый узел имеет данные и следующий элемент. Показано на изображении ниже
Связанные списки — это типы данных, которые связаны друг с другом. Поскольку каждый узел связанного списка знает адрес другого, узлы могут располагаться в совершенно разных свободных областях памяти.
Существует 4 типа связанного списка
- Односвязные списки
- Двусвязные списки
- Круговые связанные списки
- Циклические двусвязные списки
Сначала я расскажу об односвязных списках. Самый простой, простой и легкий для понимания связный список Если вы можете понять односвязный список, вы поймете и другие. Связанный список имеет начальный и конечный элементы. Добавление и удаление элементов можно применять так же, как и в массивах, и лучшим преимуществом является то, что между ними можно добавить новый элемент.
На фото выше вы можете видеть первый и последний элемент (head-20). Первый элемент - это головной узел (я имею в виду 20), а последний элемент - 40. Какой следующий элемент из 20? Да, вы правы, это 30. Мы достаточно поговорили, давайте писать код. Мы создадим свой собственный узел
public class Node { public int Data { get; set; } //data is our own element(like 20 in the above photo) public Node next { get; set; } //next node }
У нас также есть класс с именем LinkList
public class LinkedList { Node head; // shows us the first element Node tail; //last element public void AddLast(int value) // helps us add elements in LinkedList(adds to the end) { Node element = new Node(); //node to be added element.Data = value; element.next = null; if (head==null) { head = element; //keep head node tail = element; } else { tail.next = element; //node after last node tail = element; //last node update } } public void Write() //I created this method so you can see the elements { if (head==null) { Console.WriteLine("empthy"); } else { Node temp = head; Console.Write("Head"); while (temp!=null) { Console.Write($" -> {temp.Data}"); temp = temp.next; } Console.WriteLine("-> Null"); } } }
И, наконец, мы вызываем LinkedList
LinkedList list = new LinkedList(); list.Add(20); list.Add(30); list.Add(40); list.Write();
Это наш результат
Теперь добавим в конец
public void AddFirst(int value) { Node element = new Node(); element.Data = value; if (head==null) { head = element; tail = element; } else { element.next = head; head = element; } } LinkedList list = new LinkedList(); list.AddLast(20); list.AddLast(30); list.AddLast(40); list.AddFirst(10); list.AddLast(50); list.AddLast(5); list.AddLast(1 ); list.Write();
Результат
Я оставляю удаление на вас, вы напишите это
Если вы не понимаете, рекомендую запустить отладку и понаблюдать за всем процессом. Я разместил его на github для вас, если хотите, вы можете посмотреть здесь (GithubLink)