Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

3.2. Отдельно связанные списки 119

3.2.2 Вставка к фронту отдельно связанного списка

Мы можем легко вставить элемент во главе отдельно связанного списка. Мы сначала создаем a

новый узел и набор его элементарная стоимость к желаемой последовательности и набору его следующая связь, которая укажет нынешнему главе списка. Мы тогда устанавливаем голову указывать на новый узел. Процесс иллюстрирован в рисунке 3.10.

(a)

(b)

(c)

Рисунок 3.10: Вставка элемента во главе отдельно связанного списка: (a) перед вставкой; (b) создание нового узла; (c) после вставки.

Внедрение показывают в Кодовом Фрагменте 3.16. Обратите внимание на то, что доступ к элементу членов парламента, не занимающих официального поста и затем класса StringNode обычно был бы prohib-ited, но это позволено здесь, потому что StringLinkedList, как объявляли, был другом StringNode.

недействительный StringLinkedList:: addFront (константа string& e)//добавляют к фронту списка

StringNode* v = новый StringNode;

v-> элемент = e;

v-> затем = голова;

возглавьте = v;

//создайте новый узел//, хранят данные//, голова теперь следует, v//v - теперь голова

Кодовый Фрагмент 3.16: Вставка к фронту отдельно связанного списка.

3.2.3 Удаление из фронта отдельно связанного списка

Затем, мы рассматриваем, как удалить элемент из фронта отдельно связанного списка.

Мы по существу отменяем операции, выполненные для вставки. Мы сначала экономим указатель

120 Глава 3. Множества, связанные списки и рекурсия

к старому главному узлу и прогрессу главный указатель на следующий узел в списке. Мы тогда удаляем старый главный узел. Эта операция иллюстрирована в рисунке 3.11.

(a)

(b)

(c)

Рисунок 3.11: Удаление элемента во главе отдельно связанного списка: (a) перед удалением; (b) «соединение» старый новый узел; (c) после удаления.

Внедрение этой операции обеспечено в Кодовом Фрагменте 3.17. Мы предполагаем, что пользователь проверил, что список непуст прежде, чем применить эту операцию. (Более тщательное внедрение бросило бы исключение, если бы список был пуст.) Функция удаляет узел, чтобы избежать любых утечек памяти. Мы не возвращаем ценность удаленного узла. Если его стоимость желаема, мы можем вызвать переднюю функцию до удаления.

недействительный StringLinkedList:: removeFront ()

StringNode* старый = голова;

возглавьте = старый-> затем;

удалите старый;

// // // //

удалите передний пункт, спасают нынешнего главу, перескакивают через старую голову, удаляют старую голову

Кодовый Фрагмент 3.17: Удаление из фронта отдельно связанного списка.

Это примечательно, что мы не можем как легко удалить последний узел отдельно связанного списка, даже если у нас был указатель на него. Чтобы удалить узел, мы должны обновить следующую связь узла, немедленно предшествующего удаленному узлу. Расположение этого узла включает пересечение всего списка и могло занять много времени. (Мы исправляем это в Разделе 3.3, когда мы обсуждаем вдвойне связанные списки.)