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

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

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

Внедрение отдельно связанного списка, данного в Разделе 3.2.1, предполагает, что тип элемента - строка символов. Легко преобразовать внедрение так, чтобы это работало на произвольный тип элемента с помощью C ++ механизм шаблона. Получающийся универсальный отдельно связанный класс списка называют SLinkedList.

Мы начинаем, представляя класс узла, названный SNode, в Кодовом Фрагменте 3.18. Тип элемента, связанный с каждым узлом, параметризуется типом vari-способный E. В отличие от нашей более ранней версии в Кодовом Фрагменте 3.13, ссылки на тип данных «последовательность» были заменены «E «. Обращаясь к нашему templated узлу и классу списка, мы должны включать суффикс» <E>». Например, класс - SLinkedList <E>, и связанный узел - SNode <E>.

шаблон <typename E>

класс SNode

частный:

E el e m; SNode <E> * затем; друг класс SLinkedList <E>;

;

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

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

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

Универсальный класс списка представлен в Кодовом Фрагменте 3.19. Как выше, обратитесь - ences к определенному типу элемента «последовательность», были заменены ссылками на универсальный параметр типа «E». Чтобы сохранять вещи простыми, мы опустили вспомогательные функции, такие как конструктор копии.

шаблон <typename E>

класс SLinkedList

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

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

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

частный:

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

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

SNode <E> * голова; //заголовок списка

;

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

В Кодовом Фрагменте 3.20, мы представляем членские функции класса. Отметьте sim - ilarity с Кодовыми Фрагментами 3.15 до 3,17. Заметьте, что каждое определение снабжено предисловием шаблоном спецификатора шаблона <typename E>.

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

шаблон <typename E>

SLinkedList <E>:: SLinkedList ()

: голова (ПУСТОЙ УКАЗАТЕЛЬ)шаблон <typename E>

bool SLinkedList <E>:: пустой () константа

возвращают голову == ПУСТОЙ УКАЗАТЕЛЬ;шаблон <typename E>

константа E& SLinkedList <E>:: фронт () константа

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

SLinkedList <E>:: ˜SLinkedList ()

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

шаблон <typename E>

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

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

//возвратите передний элемент

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

недействительный SLinkedList <E>:: addFront (константа E& e)

SNode <E> * v = новый SNode <E>;

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

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

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

шаблон <typename E>

// // // // //

добавьте к фронту списка, создают новую голову данных магазина узла, теперь следует, v v - теперь голова

недействительный SLinkedList <E>:: removeFront ()

SNode <E> * старый = голова;

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

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

// // // //

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

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

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

SLinkedList <последовательность> a; a.addFront («MSP»);//... SLinkedList <интервал> b; b.addFront (13);

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

//список целых чисел

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

Поскольку templated классы несут относительно высокое письменное бремя, мы часто жертвуем общностью за простоту и избегаем использования templated классов в некоторых наших примерах.