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

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

R-6.14 В нашем внедрении atRank (i) функционируют в Кодовом Фрагменте 6.18

для класса NodeSequence мы шли с фронта списка. Представьте более эффективное внедрение, которое идет от того, какой бы ни конец списка ближе к индексу i.

R-6.15 Предоставьте подробную информацию внедрения множества списка ADT. R-6.16 предположим, что мы сделали kn полные доступы к элементам в списке L

n элементы, для некоторого целого числа k³ 1. Что является минимумом и максимумом

ряд элементов, к которым получили доступ меньше, чем k времена?

R-6.17 Дайте псевдокодекс, описывающий, как осуществить все операции в

последовательность ADT использование множества используется круглым способом. Какова продолжительность для каждой из этих функций?

R-6.18 Используя функции интерфейса Sequence, опишите рекурсивную функцию для

определение, содержит ли последовательность S n объектов целого числа данное целое число k. Ваша функция не должна содержать петли. Сколько пространства Ваша функция использует в дополнение к пространству, использованному для S?

R-6.19 Briefly описывают, как выполнить новую функцию последовательности makeFirst (p)

это перемещает элемент последовательности S в положении p, чтобы быть первым элементом в S, сохраняя относительный заказ остающихся элементов в S неизменным. Ваша функция должна бежать в O (1) время, если S осуществлен с вдвойне связанным списком.

R-6.20 Опишите, как осуществить iterator для класса ArrayVector Кодекса

Фрагмент 6.2, основанный на индексе целого числа. Включайте псевдокодовые фрагменты, описывающие dereferencing оператора (» * «), тест на равенство (» == «), и в - crement и декремент (» ++» и «-»).

Креативность

C-6.1 Опишите то, какие изменения должны быть внесены в растяжимое множество imple-

процесс мышления, данный в Кодовом Фрагменте 6.2, чтобы избежать неожиданный трижды - mination из-за ошибки. Определите новые типы исключений, которые Вы добавили бы, и когда и где они должны быть брошены.

C-6.2 Дайте полный C ++ кодекс для нового класса, ShrinkingVector, который простирается

класс ArrayVector, показанный в Кодовом Фрагменте 6.2 и, добавляет функцию, shrinkToFit, который заменяет основное множество множеством, чье приблизительно - pacity в настоящее время точно равен ряду элементов в векторе.

C-6.3 Опишите то, какие изменения должны быть внесены в растяжимое множество implemen-

tation, данный в Кодовом Фрагменте 6.2, чтобы сократить размер N множества наполовину любое время ряд элементов в векторе, понижается N/4.

264

Глава 6. Список и Iterator adTs

C-6.4 Покажите, что, используя растяжимое множество, которое растет и сжимается как в

предыдущее осуществление, следующая серия 2n операции берет O (n) время: (i) n выдвигают операции на векторе с начальной способностью N = 1; (ii) популярность n (удаление последнего элемента) операции.

C-6.5 Опишите функцию для выполнения карты shuffle множества 2n el-

ements, преобразовывая его в два списка. Карта shuffle является перестановкой, где список L сокращен в два списка, L1 и L2, где L1 - первая половина L, и L2 - вторая половина L, и затем эти два списка слиты в один, беря первый элемент в L1, тогда первый элемент в L2, сопровождаемом вторым элементом в L1, вторым элементом в L2, и так далее.

C-6.6 Покажите, как улучшить внедрение вставки функции (я, e) в Кодексе

Фрагмент 6.5 так, чтобы, в случае overflow, элементы скопированы в их заключительное место в новом множестве.

C-6.7 Считайте внедрение вектора ADT использование растяжимого множества,

но вместо того, чтобы копировать элементы во множество дважды размера (то есть, от N до 2 Н), когда его способность достигнута, мы копируем элементы в

множество сN/4 ⌉ дополнительные клетки, идущие от способности N к N +N/4 ⌉.

Покажите, что выполнение последовательности n выдвигает операции (то есть, вставки

в конце), все еще управляет в O (n) временем в этом случае.

C-6.8 Внедрение NodeList, данное в Кодовых Фрагментах 6.9 до 6,12

не делает никакой проверки, чтобы определить, является ли данное положение p ac-tually член этого особого списка. Например, если p будет положением в списке S, и мы называем T.insert (p, e) в различном списке T, то тогда мы фактически добавим элемент к S как раз перед p. Опишите, как изменить внедрение NodeList эффективным способом, чтобы отвергнуть такие неправильные употребления.

C-6.9 Опишите внедрение функций insertBack и insertFront

реализованный при помощи комбинаций только пустых функций и вставка. C-6.10 Рассмотрите следующий фрагмент C ++ кодекс, предположив что construc-

Последовательность скалистой вершины создает пустую последовательность объектов целого числа. Вспомните, что подразделение между целыми числами выполняет усечение (например, 7/2 = 3).

Последовательность <интервал> seq; для (интервал i = 0; я <n; я ++)

seq.insertAtRank (i/2, i);

a. Предположите, что для петли выполнен 10 раз, то есть, n = 10, и

покажите последовательность после каждого повторения петли.

b. Сделайте схематическую иллюстрацию последовательности в конце для

петля, для универсального номера n повторений. C-6.11 предположим мы хотим расширить тип данных резюме Последовательности с функциями

indexOfElement (e) и positionOfElement (e), которые соответственно возвращают индекс и положение (первое возникновение) элемент e в