Связанный список — это специальный список, в котором каждый элемент (или объект-контейнер для каждого элемента) в списке имеет прямую ссылку («ссылку») на следующий элемент в списке. Этот тип списка не реализуется с использованием массива.
Односвязный список обычно имеет только ссылку на следующий элемент, а последний элемент имеет значение null, чтобы указать конец списка.
Двусвязный список имеет ссылку как на следующий, так и на предыдущий элементы с нулевыми значениями для обозначения каждого конца списка.
Преимущество связного списка в том, что вставки и удаления выполняются чрезвычайно быстро. Итерация по всему списку также имеет хорошую производительность, но нелинейный поиск может быть медленным.
Обычно реализация связанного списка должна реализовывать интерфейс IEnumerable<T>
. Реализация IList<T>
будет способствовать использованию неэффективного линейного поиска.
Реализация связанного списка в .NET имеет следующее объявление (за вычетом некоторого не относящегося к делу хлама).
LinkedList<T> : ICollection<T>, IEnumerable<T>, ICollection, IEnumerable
Как и в случае с интерфейсом IList<T>
, я не понимаю, почему реализованы интерфейсы ICollection
и ICollection<T>
, но они есть.
Объект-контейнер элементов (со ссылками) выглядит следующим образом:
public sealed class LinkedListNode<T>
{
public LinkedListNode<T> Next { get; }
public LinkedListNode<T> Previous { get; }
public T Value { get; set; }
}
Как это?
10.03.2010