Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы / Глава 2_Инф._структуры.doc
Скачиваний:
70
Добавлен:
15.02.2015
Размер:
1.28 Mб
Скачать

Глава 2. Информационные структуры

2.1. Линейные списки

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

Элемент списка может иметь вторичную структуру, состоящую из отдельных полей, представляющих разные типы данных (целые числа, вещественные числа, строки символов, логические значения «истина»/«ложь»«1» /«0» и т.д.). Такие списки часто называют файлами.

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

Операции с линейными списками. С линейными списками могут выполняться следующие операции (их следует отличать от операций над значениями элементов):

1. Получение доступа к элементу по известному номеру. Время доступа напрямую зависит от типа памяти, в котором хранится список. Память компьютера разделяется на:

- память с произвольным доступом (RAM);

- память с доступом только для чтения (ROM);

- внешнюю память для хранения больших объёмов информации;

- ассоциативную память (CAM), в которой доступ осуществляется не по адресу, а по содержанию (значению).

2. Вставка нового элемента перед или после .

3. Удаление элемента .

4. Объединение списков с охранением порядка следования элементов (конкатенация).

5. Разбиение списка на части.

6. Дублирование списка.

7. Определение длины списка.

8. Сортировка, то есть изменение порядка следования элементов в порядке возрастания значений какого-либо поля (ключа), входящего в структуру элементов списка. Если ключ сортировки имеет численное значение , то сортировка по убываниюравносильна сортировке по возрастанию : ().

Способ представления списков в памяти компьютера, как и тип памяти, выбираются с учётом тех из перечисленных выше операций, которые применяются наиболее часто.

Линейные списки с оконечным доступом. Линейные списки, в которых доступ к значению элемента, удаление и вставка элементов производятся на одном из концов, разделяются на следующие типы:

1. Стек — список, в котором операции доступа, вставки и удаления производятся только на одном фиксированном «верхнем» конце списка (рис. 1).

Рис. 1.

Дисциплина обслуживания стека описывается термином «последний пришёл – первый ушёл»; по-английски «last in – first out» (LIFO).

2. Односторонняя очередь, или просто очередь, — список, в котором вставка элементов выполняются на одном конце списка («постановка в очередь»), а доступ и удаление («после обслуживания») — на другом конце (рис. 2).

Удаление из

начала очереди

Добавление в конец очереди

Рис. 2.

Дисциплина обслуживания односторонней очереди описывается как «первый пришёл – первый ушёл»; по-английски «first in – first out» (FIFO).

3. Дек, или двусторонняя очередь, (double-ended queue) — список, в котором доступ, вставка и удаление могут выполняться на обоих концах списка. Дополнительно различают деки с ограниченным вводом и деки с ограниченным выводом, в которых указанная операция (в отличие от противоположной) может выполняться только на одном из концов (рис. 3).

Рис. 3.