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

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

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

В предыдущей секции мы представили структуру данных множества и обсудили некоторые ее заявления. Множества хороши и просты для хранения вещей в определенном заказе, но у них есть недостатки. Они не очень приспосабливаемы. Например, мы должны фиксировать размер n множества заранее, которое делает изменение размеров множества трудным. (Этот недостаток исправлен в векторах STL.) Вставки и удаления трудные, потому что элементы должны быть перемещены вокруг, чтобы сделать пространство для вставки или заполнить пустые положения после удаления. В этой секции мы исследуем важное дополнительное внедрение последовательности, известной как отдельно связанный список.

Связанный список, в его самой простой форме, является коллекцией узлов, которые вместе формируют линейный заказ. Как в детской игре «Следуют за Лидером», каждый узел хранит указатель, названный затем, к следующему узлу списка. Кроме того, каждый узел хранит свой связанный элемент. (См. рисунок 3.9.)

Рисунок 3.9: Пример отдельно связанного списка кодов аэропортов. Следующие указатели

показанный как стрелы. Пустой указатель обозначен∅.

Следующий указатель в узле - связь или указатель на следующий узел списка.

Перемещаясь от одного узла до другого следующим следующая ссылка известна как прыгающая связь или прыгающий указатель. Первые и последние узлы связанного списка называют головой и хвостом списка, соответственно. Таким образом мы можем перелет связи через список, начинающийся в голове и заканчивающийся в хвосте. Мы можем идентифицировать хвост как узел, имеющий пустой указатель следующая ссылка. Структуру называют отдельно связанным списком, потому что каждый узел хранит единственную связь.

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

3.2.1 Осуществление отдельно связанного списка

Давайте осуществим отдельно связанный список последовательностей. Мы сначала определяем класс StringNode, показанный в Кодовом Фрагменте 3.13. Узел хранит две ценности, членский элемент хранит элемент, сохраненный в этом узле, который в этом случае является строкой символов. (Позже, в Разделе 3.2.4, мы описываем, как определить узлы, которые могут сохранить произвольные типы элементов.) Участник затем хранит указатель на следующий узел списка. Мы составляем связанный список классифицировать друга, так, чтобы он мог получить доступ к членам парламента, не занимающим официального поста узла.

118

класс StringNode

частный:

элемент последовательности; StringNode* затем;

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

//узел в списке последовательностей

//стоимость элемента//следующий пункт в списке

друг класс StringLinkedList; //обеспечивают доступ StringLinkedList

;

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

В Кодовом Фрагменте 3.14, мы определяем класс StringLinkedList для фактического связанного списка. Это поддерживает много членских функций, включая конструктора и destruc-скалистую вершину и функции для вставки и удаления. Их внедрения представлены позже. Его частные данные состоят из указателя на главный узел списка.

класс StringLinkedList

общественность:

//связанный список последовательностей

StringLinkedList (); ˜StringLinkedList (); пустой bool () константа; константа string& фронт () константа; пустота addFront (константа string& e); пустота removeFront ();

частный:

// // // // // //

пустая печь для сжигания отходов производства конструктора списка - пустой список? доберитесь передний элемент добавляют к фронту списка, удаляют передний список изделия

StringNode* голова; //указатель на заголовок списка

;

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

Много простых членских функций показывают в Кодовом Фрагменте 3.15. Конструктор списка создает пустой список, устанавливая главный указатель на ПУСТОЙ УКАЗАТЕЛЬ. De - structor неоднократно удаляет элементы из списка. Это эксплуатирует факт, что func-tion удаляют (представленный ниже), разрушает узел, который это удаляет. Чтобы проверить, пуст ли список, мы просто проверяем, пустой ли главный указатель.

StringLinkedList:: StringLinkedList ()

: голова (ПУСТОЙ УКАЗАТЕЛЬ)StringLinkedList:: ˜StringLinkedList ()

в то время как (! пустой ()) removeFront ();bool StringLinkedList:: пустой () константа

возвращают голову == ПУСТОЙ УКАЗАТЕЛЬ;константа string& StringLinkedList:: фронт () константа

возвращают голову-> элемент;

//конструктор

//печь для сжигания отходов производства

//действительно ли список пуст?

//получите передний элемент

Кодовый Фрагмент 3.15: Некоторые простые членские функции класса StringLinkedList.