Керівництво c #, зв’язний список клас linkedlist - t

клас LinkedList є двохзв'язной список, в якому кожен елемент посилається на наступний і попередній, як показано на малюнку:

Керівництво c #, зв'язний список клас linkedlist - t

Перевага зв'язного списку проявляється в тому, що операція вставки елемента в середину виконується дуже швидко. При цьому тільки посилання Next (наступний) попереднього елемента і Previous (попередній) наступного елементу повинні бути змінені так, щоб вказувати на вставляється елемент. У класі List при вставці нового елементу всі наступні повинні бути зрушені.

Природно, у зв'язкових списків є і свої недоліки. Так, наприклад, всі елементи зв'язкових списків доступні лише один за одним. Тому для знаходження елемента, що знаходиться в середині або кінці списку, потрібно досить багато часу. Зв'язний список не може просто зберігати елементи всередині себе. Разом з кожним з них йому необхідно мати інформацію про наступне і попередньому елементах. Ось чому LinkedList містить елементи типу LinkedListNode. За допомогою класу LinkedListNode з'являється можливість звернутися до попереднього і подальшого елементам списку. клас LinkedListNode визначає властивості List, Next, Previous і Value. Властивість List повертає об'єкт LinkedList, асоційований з вузлом. Властивості Next і Previous призначені для ітерацій за списком і для доступу до наступного і попереднього елементам. Властивість Value типу T повертає елемент, асоційований з вузлом.

Сам клас LinkedList визначає члени для доступу до першого (First) і останньому (Last) елементам в списку, для вставки елементів в певні позиції (AddAfter (), AddBefore (), AddFirst (), AddLast ()), для видалення елементів із заданих позицій (Remove (), RemoveFirst (), RemoveLast ()) і для знаходження елементів, починаючи пошук або з початку (Find ()), або з кінця (FindLast ()) списку.

У класі LinkedList реалізуються інтерфейси ICollection, ICollection, IEnumerable, IEnumerable, ISerializable і IDeserializationCallback. У двох останніх інтерфейсах підтримується сериализация списку. У класі LinkedList визначаються два наведених нижче відкритих конструктора:

У першому конструкторі створюється порожній зв'язний список, а в другому конструкторі - список, ініціалізіруемих елементами з колекції collection.

У класі LinkedList визначається чимало методів. Найбільш часто використовувані методи, визначені в класі LinkedList представлені нижче:

Додає до списку вузол із значенням безпосередньо після зазначеного вузла. Указується вузол не повинен бути порожнім (null). Метод повертає посилання на вузол, що містить значення.

Додає до списку вузол із значенням value безпосередньо перед зазначеним вузлом. Указується вузол не повинен бути порожнім (null). Метод повертає посилання на вузол, що містить значення.

Додають вузол із значенням на початок або в кінець списку.

Повертає посилання на перший вузол у списку, який має передане значення. Якщо шукане значення відсутній в списку, то повертається порожнє значення.

Видаляє зі списку перший вузол, що містить передане значення. Повертає логічне значення true, якщо вузол видалений, тобто якщо вузол із значенням виявлений в списку і видалений; в іншому випадку повертає логічне значення false.

Давайте розглянемо приклад використання зв'язкових списків:

Керівництво c #, зв'язний список клас linkedlist - t