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

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

6.1 Векторы

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

к каждому элементу e в S использование целого числа в диапазоне [0, n- 1], который равен

ряд элементов S, которые предшествуют e в S. Индекс элемента e в S

ряд элементов, которые являются прежде e в S. Следовательно, у первого элемента в S есть индекс

0 и последний элемент имеет индекс n - 1. Кроме того, если у элемента S есть индекс i,

у предыдущего элемента (если это существует) есть индекс i - 1и его следующий элемент (если это существует), имеет

индекс i + 1. Это понятие индекса связано с тем из разряда элемента в a

список, который обычно определяется, чтобы быть еще одним, чем его индекс; таким образом, первый элемент в разряде 1, второе в разряде 2 и так далее.

Последовательность, которая поддерживает доступ к его элементам их индексами, называют vec-скалистой вершиной. Так как наше определение индекса более совместимо со способом, которым множества внесены в указатель в C ++ и другие общие языки программирования, мы обращаемся к месту, где элемент сохранен в векторе как его «индекс», а не его «разряд».

Это понятие индекса - простое все же сильное понятие, так как это может привыкнуть к

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

6.1.1 Векторный тип данных резюме

Вектор, также названный списком множества, является ADT, который поддерживает следующий funda-

умственные функции (в дополнение к стандартному размеру () и пустой () функции). Всего

случаи, параметр индекса я, как предполагается, нахожусь вразмере диапазонаçà £ £0 i()- 1.

в (i): Возвратите элемент V с индексом i; состояние ошибки

происходит, если я вне диапазона.

набор (я, e): Замените элемент в индексе i с e; состояние ошибки

происходит, если я вне диапазона.

вставка (я, e): Вставьте новый элемент e в V, чтобы иметь индекс i; ошибка

условие происходит, если я вне диапазона.

сотрите (i): Удалите от V элемент в индексе i; состояние ошибки

происходит, если я вне диапазона.

Мы не настаиваем, чтобы множество использовалось, чтобы осуществить вектор, так, чтобы элемент в индексе 0 был сохранен в индексе 0 во множестве, хотя это - один (очень естественный) possi-bility. Определение индекса предлагает нам способ относиться к «месту», где элемент сохранен в последовательности, не имея необходимость волноваться о точном внедрении той последовательности. Индекс элемента может измениться, когда последовательность обновлена, однако, поскольку мы иллюстрируем в следующем примере.

6.1. Векторы 229

Пример 6.1: Мы показываем ниже некоторых операций на первоначально пустом векторе V.

Операция

Продукция

V

вставка (0, 7)

-

(7)

вставка (0, 4)

-

(4, 7)

в (1)

7

(4, 7)

вставка (2, 2)

-

(4, 7, 2)

в (3)

«ошибка»

(4, 7, 2)

сотрите (1)

-

(4, 2)

вставка (1, 5)

-

(4, 5, 2)

вставка (1, 3)

-

(4, 3, 5, 2)

вставка (4, 9)

-

(4, 3, 5, 2, 9)

в (2)

5

(4, 3, 5, 2, 9)

набор (3, 8)

-

(4, 3, 5, 8, 9)

6.1.2 Простое основанное на множестве внедрение

Очевидный выбор для осуществления вектора ADT состоит в том, чтобы использовать фиксированное множество размера

A, где [я] хранит элемент в индексе i. Мы выбираем размер N множества, чтобы быть достаточно большими, и мы поддерживаем номер n <N элементов в векторе в членской переменной.

Детали внедрения функций вектора ADT являются rea-, sonably простым. Чтобы осуществить при (i) операции, например, мы просто возвращаемся [я]. Внедрения вставки функций (я, e) и стирают (i), даны в Кодовом Фрагменте 6.1.

Вставка алгоритма (я, e):

для j = n- 1, n- 2..., я делаю

[j + 1]¬ [j] Создают место для нового элемента[я]¬ e n¬ n+1

Алгоритм стирает (i):

для j = я + 1, я + 2..., n- 1 делают

[j- 1]¬ [j] Заполняют для удаленного элементаn¬ n-1

Кодовый Фрагмент 6.1: вставка Методов (я, e) и стирает (i) во внедрении множества вектора ADT. Членская переменная n хранит ряд элементов.

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

230