
- •Конспект лекций по курсу Программирование на языке высокого уровня.
- •Часть I. Структурное программирование
- •Автор: доцент Шустова л.И.
- •Часть II. Структуры данных 16
- •Часть III. Методы сортировки 97
- •Понятие системы программирования
- •Типы и назначение файлов
- •Директива#include
- •Директива #define
- •Директива условной генерации
- •Основы ввода/вывода
- •Вывод данных
- •Ввод данных
- •Определение и использование функций
- •Функция вычисления факториала числа.
- •Функция возведения вещественного числа в целую степень
- •Функция, меняющая местами значения двух параметров
- •Описание массива
- •Пример программы с использованием массива целых чисел
- •Абстрактные структуры данных
- •Определение
- •Базовые структуры данных
- •Очереди и стеки
- •Деревья
- •Внутренние структуры данных
- •Векторы
- •Отображение абстрактных структур данных на внутренние
- •Строка-вектор
- •1. Функция сцепления двух строк.
- •2. Функция поэлементного сравнения двух строк.
- •3. Функция разбиения строки.
- •4. Функция нахождения подстроки в строке.
- •Строка-список
- •1. Сцепление двух строк.
- •2. Поэлементное сравнение двух строк.
- •3. Разбиение строки на несколько частей.
- •4. Функция нахождения подстроки в строке.
- •Стек-вектор
- •Стек-список
- •Очереди
- •Очередь-вектор
- •Очередь-список
- •Деревья
- •Классификация таблиц
- •Способ работы с таблицей
- •Способ доступа к таблице
- •Просматриваемые таблицы
- •Просматриваемая таблица-вектор
- •Статическая просматриваемая таблица-вектор
- •Динамическая просматриваемая таблица-вектор
- •Просматриваемая таблица-список
- •Упорядоченные таблицы
- •Упорядоченная таблица-вектор
- •Динамическая упорядоченная таблица-вектор
- •Перемешанные таблицы
- •Открытое перемешивание
- •Перемешивание сцеплением
- •Деревья поиска
- •Бинарное дерево
- •Многоходовые деревья
- •Структура вершины в-дерева
- •Операция вставки
- •Удаление элемента
- •Перераспределение элементов
- •Сцепление вершин
- •Операция включения
- •Удаление элемента
- •Методы сортировки
- •Введение
- •Классификация методов внутренней сортировки
- •Быстрая сортировка
- •Распределительные сортировки
- •Сортировка поразрядным группированием
- •Сортировка вычислением адреса
Таблицы
Классификация таблиц
Как было сказано ранее, таблицапредставляет собой совокупность (множество) элементов – записей, каждая из которых состоит из двух частей (рис.II-32):ключа, определяющего каждый элемент, иинформации, определяющей смысловое содержание элемента и подлежащей обработке.
-
Ключ
Информация
Рис. II‑32.
Таблицы могут быть отображены в памяти и вектором, и списком.
При отображении таблицы вектором каждый элемент вектора имеет два поля: поле ключа и поле информации (в соответствии со структурой записи, приведенной на рис. II-32). На практике и ключ, и информация могут быть представлены элементами разной (переменной) длины. В этом случае и поле ключа, и поле информации в элементе вектора должны иметь достаточный размер для хранения любых соответствующих значений. Следовательно, размер элемента вектора должен определяться максимальными размерами полей ключа и информации. Такой подход представляется достаточно неэкономным, поэтому на практике и поле ключа, и поле информации могут быть косвенно адресуемыми, т.е., содержать только указатели на соответствующие значения ключа и информации. Если размеры ключа и/или информации значительно изменяются от записи к записи, такой способ хранения может оказаться наиболее эффективным.
При отображении таблицы списком элемент списка также может быть представлен по-разному, в зависимости от размещения записи таблицы в элементе списка (рис. II-33):
Рис. II‑33.
элемент списка, по определению, содержит два указателя; указатель на информацию, размещаемую в элементе списка, представляет собой указатель на запись таблицы;
в элементе списка размещается весь элемент таблицы (если все элементы таблицы имеют одинаковый и небольшой размер);
Приведенные два способа рассматривают запись таблицы как нечто целое, не имеющее (с точки зрения отображения списком) внутренней структуры. Если же учесть структуру записи таблицы при ее отображении списком, можно предложить еще два способа задания элемента списка:
если поле информации в записях таблицы имеет переменный размер, тогда в элементе списка размещается ключ записи таблицы и указатель на информацию;
если и поле ключа, и поле информации имеют переменные размеры, тогда в элементе списка размещаются указатели на ключ и на информацию.
Конкретный способ выбирается из условий прикладной задачи.
В реальных ситуациях, в зависимости от конкретного типа таблицы, может быть использован и более сложный способ ее отображения. Поэтому, прежде всего, рассмотрим классификацию таблиц.
Критерием для классификации таблиц служат допустимые операции с таблицами и особенности их выполнения. При рассмотрении набора операций не принимается во внимание структура и тип информации, хранящейся в таблице; структуры данных определяют способ доступак информационным элементам, что позволяет получить хранящуюся в структуре информацию, ноне способ обработкиэтой информации (обработка информации определяется прикладной программой). Поэтому, прежде всего, определим, какие операции определены для таблиц как для соответствующей структуры данных.
С таблицами можно выполнять следующие операции:
Включениенового элемента в таблицу.
В случае добавления к таблице записи с заданным ключом аппарат обработки записей таблицы должен возвратить в качестве ответа указатель на то место, куда должна быть помещена информация. Эту операцию можно рассматривать с двух точек зрения:
Если потребовать, чтобы в таблице не было двух или более элементов с одинаковыми значениями ключей, тогда перед включением нового элемента в таблицу следует проверить, нет ли в таблице другого элемента с таким же значением ключа. Новый элемент будет включен в таблицу, только если его ключ уникален.
Если такое требование снять и допустить наличие в таблице нескольких элементов с одинаковым значением ключа, тогда новый элемент добавляется в таблицу, безусловно.
Удалениеэлемента из таблицы.
Эта операция должна выполняться в два этапа: сначала осуществляется поиск в таблице элемента, заданного своим ключом, и в случае успешного поиска найденный элемент удаляется из таблицы.
Поискнекоторого заданного ключом элемента в таблице.
Результатом поиска должна быть связанная с ключом информация. При обращении к таблице задается ключ, а аппарат, обеспечивающий доступ к таблице, выдает в качестве ответа указатель на информацию, связанную с данным элементом. Если эта информация невелика по объему, то в качестве ответа может быть выдана она сама. Если в таблице не допускается наличие двух или более элементов с одинаковыми значениями ключей, результат успешного поиска будет однозначным. Если же в таблице допускается наличие нескольких элементов с одинаковыми значениями ключей, для однозначного поиска элемента нужно указать некоторую дополнительную информацию, (например, версию элемента с данным значением ключа, или первый встреченный элемент с заданным значением ключа – другими словами, используется некоторый составнойключ, однозначно определяющий каждый элемент таблицы). В любом случае можно, за счет использования дополнительной информации, получить уникальное значение ключа. Поэтому в дальнейшем мы будем рассматривать таблицы в предположении, что в таблице нет двух или более элементов с одинаковым значением ключа (каждый элемент таблицы однозначно определяется своим ключом), причем структура поля ключа нас интересовать не будет.
Таким образом, из анализа приведенных выше операций следует, что с таблицами обязательно (за исключением второго способа включения элемента в таблицу) связана операция поиска элемента по ключу. В зависимости от результата операции поиска (успешный или нет) будет или не будет выполнена та или иная дополнительная операция. Ключ может быть достаточно сложным, состоять из одного или нескольких полей, но его всегда можно преобразовать к некоторому числовому значению (например, просто сложив двоичные коды всех байтов, определяющих ключ). Поэтому в дальнейшем в качестве ключа мы будем использовать целое значение (типаint).
Для классификации таблиц обычно используют два критерия:
Изменяется или нет состояние таблицы в процессе работы с ней (допустимы или нет для таблицы операции включения/удаления элементов); этот критерий определяет способ работы с таблицей.
Как выполняется основная операция с таблицей – операция поиска; этот критерий определяет способ доступа к таблице.