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

5.4. Упражнения

225

нормальное полностью введенное выражение, операция которого - «», тогда

постфиксируйте версию этого, «pexp1 pexp2 », где pexp1 - постфиксация ver-

Сьон exp1 и pexp2 - версия постфиксации exp2. Версия постфиксации

из единственного числа или переменной просто то число или переменная. Так, для экс-

вполне достаточный, версия постфиксации» ((5 + 2)* (8- 3))/4» «5 2 + 8 3-*

4 / «. Опишите нерекурсивный способ оценить выражение в постфиксации

примечание.

C-5.9 предположим у Вас есть два непустых стека S и T и deque D. Описать

как использовать D так, чтобы S содержал все элементы T ниже всех его оригинальных элементов с обоими наборами элементов все еще в их первоначальном заказе.

C-5.10 У Элис есть три основанных на множестве стека, A, B, и C, такой, что у A есть способность

100, у B есть способность 5, и у C есть способность 3. Первоначально, A полон, и B, и C пусты. К сожалению, человек, который запрограммировал класс для этих стеков, сделал толчок и популярные функции частными. Единственная функция, которую может использовать Элис, является статической функцией, передача (S, T), который переходит (многократно применяя частную популярность и функции толчка) элементы от стека S, чтобы сложить T, пока или S не становится пустым или T, становится полным. Так, например, начинаясь с нашей начальной конфигурации и выполняющий передачу (A, C) пере - sults в теперь холдинге 97 элементов и C удерживание 3. Опишите последовательность операций по передаче, которая начинается с начальной конфигурации и приводит к B удерживание 4 элементов в конце.

C-5.11 Покажите, как использовать стек S и очередь Q, чтобы произвести все возможные подмножества

из набора n-элемента T нерекурсивно.

Проекты

P-5.1 Дайте внедрение deque ADT использование множества, так, чтобы каждый из

функции обновления бегут в O (1) время.

P-5.2 Проектируйте ADT для двухцветного, двойного стека ADT, который состоит из два

стеки - один «красный» и один «синий» цвет - и имеют, поскольку его действия нанесли цветную маркировку на версии регулярного стека операции ADT. Например, этот ADT должен допускать и красную операцию по толчку и синюю операцию по толчку. Дайте эффективное внедрение этого ADT использование единственного множества, способность которого установлена в некоторой стоимости N, который, как предполагается, всегда больше, чем размеры красных и синих объединенных стеков.

P-5.3 Осуществите стек ADT полностью универсальным способом (с помощью

шаблоны) посредством отдельно связанного списка. (Дайте свое внедрение «с нуля» без использования любых классов из Стандартной Библиотеки Шаблона или структур данных, представленных ранее в этой книге.)

P-5.4 Осуществите стек ADT полностью универсальным способом, используя вектор STL

класс.

226

Глава 5. Стеки, очереди и Deques

P-5.5 Осуществите очередь ADT полностью универсальным способом, используя динамично

ассигнованный C ++ множество. P-5.6 Осуществите очередь ADT с отдельно связанным списком. P-5.7 Осуществите deque ADT со множеством, используемым круглым способом. P-5.8 Осуществите deque ADT с вдвойне связанным списком. P-5.9 Осуществите ограниченную способностью версию deque ADT основанный на площади -

луч, используемый круглым способом, подобным внедрению очереди Секунды - tion 5.2.4.

P-5.10 Осуществите взаимодействия Стека и Очереди с уникальным классом, который является de -

расколотый от класса LinkedDeque (Кодовый Фрагмент 5.21). P-5.11 Когда обыкновенная акция некоторой компании продана, капитал

выгода (или, иногда, потеря) является различием между отпускной ценой акции и ценой, первоначально заплаченной, чтобы купить его. Это правило легко под - обозначают единственную акцию, но если мы продаем многократные акции запаса, купленного за длительный период времени, тогда мы должны определить акции фактически быть - проданный луг. Стандартный принцип бухгалтерского учета для идентификации, какие акции запаса были проданы в таком случае, должен использовать протокол FIFO - проданные акции являются теми, которые считались самым длинным (действительно, это - de - метод ошибки, встроенный в несколько личных финансовых пакетов программ). Например, предположите, что мы покупаем 100 акций в 20$ каждый в день 1, 20 акций в 24$ в день 2, 200 акций в 36$ в день 3, и затем продаем 150 акций в день 4 в 30$ каждый. Тогда применение протокола FIFO означает что 150 проданных акций, 100 были куплены в день 1, 20 были куплены в день 2, и 30 были куплены в день 3. Капитальная прибыль в этом случае поэтому была бы

100 10 + 20 6 + 30 (-6), или 940$. Напишите программу, которая берет в качестве входа

последовательность сделок формы «покупает x акцию (и) в $y каждый»

или «продают x акцию (и) в $y каждый», предполагая, что сделки oc-злая собака в дни подряд и ценности x и y являются целыми числами. Учитывая эту входную последовательность, продукция должна быть совокупной капитальной прибылью (или потеря) для всей последовательности, используя протокол FIFO, чтобы определить акции.

P-5.12 Осуществите программу, которая может ввести выражение в примечании постфиксации (см.

Упражнение C-5.8) и продукция его стоимость.

Примечания к главе

Мы были представлены подходу определения структур данных сначала с точки зрения их ADTs и затем с точки зрения конкретных внедрений классическими книгами Aho, Хопкрофтом и Ульманом [4, 5], который случайно является, где мы увидели в первый раз проблему, подобную, чтобы Осуществить C-5.6. Упражнение C-5.10 подобно, чтобы взять интервью у вопросов, сказал, чтобы быть от известной компании-разработчика программного обеспечения. Для дальнейшего исследования абстрактных типов данных посмотрите Лискова и Гаттэга [68], Карделли и Вегнер [19], или Demurjian [27].

Глава

6

Список и Iterator ADTs

Содержание

6.1

6.2

6.3

6.4

6.5

Векторы.......................... 6.1.1 Векторный Тип данных Резюме........... 6.1.2 Простое Основанное на множестве Внедрение........ 6.1.3 Растяжимое Внедрение Множества......... 6.1.4 Вектора STL......................

Списки............................ 6.2.1 Основанный на узле Operations и Iterators......... 6.2.2 Тип данных Резюме Списка............. 6.2.3 Вдвойне Связанное Внедрение Списка.......... 6.2.4 Списка STL....................... 6.2.5 Containers STL и Iterators.............

Последовательности........................ 6.3.1 Тип данных резюме последовательности.......... 6.3.2 Осуществление последовательности с вдвойне связанным списком 6.3.3, осуществляющим последовательность со множеством.......

Тематическое исследование: вид пузыря на последовательности....... 6.4.1 Алгоритм вида пузыря.............. 6.4.2 Основанный на последовательности анализ вида пузыря......

Упражнения.........................

228 228 229 231 236 238 238 240 242 247 248 255 255 255 257 259 259 260 262