
- •Содержание
- •Введение
- •1. Cтруктуры данных и алгоритмы
- •1.1. Понятие структур данных и алгоритмов
- •1.2. Информация и ее представление в памяти
- •1.2.1. Природа информации
- •1.2.2. Хранение информации
- •1.3. Системы счисления
- •1.3.1. Непозиционные системы счисления
- •1.3.2. Позиционные системы счисления
- •1.3.3. Изображение чисел в позиционной системе счисления
- •1.3.4. Перевод чисел из одной системы счисления в другую
- •1.4. Классификация структур данных
- •1.5. Операции над структурами данных
- •1.6. Структурность данных и технология программирования
- •2. Простые структуры данных
- •2.1. Числовые типы
- •2.1.1. Целые типы
- •2.1.2. Вещественные типы
- •1). Число 15.375;
- •2). Десятичное число 0.0375;
- •3). Десятичное число 2.5;
- •4). Значения верхней и нижней границ диапазона положительных чисел:
- •1). Число -15.375;
- •2). Число 1.0;
- •3). Значения верхней и нижней границ диапазона положительных чисел
- •2.1.3. Десятичные типы
- •2.1.4. Операции над числовыми типами
- •2.2. Битовые типы
- •2.3. Логический тип
- •2.4. Символьный тип
- •2.5. Перечислимый тип
- •2.6. Интервальный тип
- •2.7. Указатели
- •2.7.1. Физическая структура указателя
- •2.7.2. Представление указателей в языках программирования
- •2.7.3. Операции над указателями.
- •3. Статические структуры данных
- •3.1. Векторы
- •3.2. Массивы
- •3.2.1. Логическая структура
- •3.2.2. Физическая структура
- •3.2.3. Операции
- •3.2.4. Адресация элементов с помощью векторов Айлиффа
- •3.2.5. Специальные массивы
- •3.3. Множества
- •3.3.1. Числовые множества
- •3.3.2. Символьные множества
- •3.3.3. Множество из элементов перечислимого типа
- •3.3.4. Множество от интервального типа
- •3.3.5. Операции над множествами
- •3.4. Записи
- •3.4.1. Логическое и машинное представление записей
- •3.4.2. Операции над записями
- •3.5. Записи с вариантами
- •3.6. Таблицы
- •3.7. Операции логического уровня над статическими структурами. Поиск
- •3.7.1. Последовательный или линейный поиск
- •3.7.2. Бинарный поиск
- •3.8. Операции логического уровня над статическими структурами. Сортировка
- •3.8.1. Сортировки выборкой
- •3.8.2. Сортировки включением
- •3.8.3. Сортировки распределением.
- •3.8.4. Сортировки слиянием.
- •4. Полустатические структуры данных
- •4.1. Характерные особенности полустатических структур
- •4.2. Стеки
- •4.2.1. Логическая структура стека
- •4.2.2. Машинное представление стека и реализация операций
- •4.2.3. Стеки в вычислительных системах
- •4.3. Очереди fifo
- •4.3.1. Логическая структура очереди
- •4.3.2. Машинное представление очереди fifo и реализация операций
- •4.3.3. Очереди с приоритетами
- •4.3.4. Очереди в вычислительных системах
- •4.4. Деки
- •4.4.1. Логическая структура дека
- •4.4.2. Деки в вычислительных системах
- •4.5. Строки
- •4.5.1. Логическая структура строки
- •4.5.2. Операции над строками
- •4.5.3. Представление строк в памяти.
- •5. Динамические структуры данных. Связные списки
- •5.1. Связное представление данных в памяти
- •5.2. Связные линейные списки
- •5.2.1. Машинное представление связных линейных списков
- •5.2.2. Реализация операций над связными линейными списками
- •5.2.3. Применение линейных списков
- •5.3. Мультисписки
- •5.4. Нелинейные разветвленные списки
- •5.4.1. Основные понятия
- •5.4.2. Представление списковых структур в памяти.
- •5.4.3. Операции обработки списков
- •5.5. Язык программирования lisp
- •5.6. Управление динамически выделяемой памятью
- •6. Нелинейные структуры данных
- •6.1.Графы
- •6.1.1. Логическая структура, определения
- •6.1.2. Машинное представление оpгpафов
- •6.2. Деревья
- •6.2.1. Основные определения
- •6.2.2. Логическое представление и изображение деревьев.
- •6.2.3. Бинарные деревья.
- •6.2.4. Представление любого дерева, леса бинарными деревьями.
- •6.2.5. Машинное представление деревьев в памяти эвм.
- •6.2.6. Основные операции над деревьями.
- •6.2.7. Приложения деревьев.
- •6.2.8 Деревья Хаффмена (деревья минимального кодирования)
- •6.2.9 Деревья при работе с арифметическими выражениями
- •6.2.10 Формирование таблиц символов.
- •6.2.11 Сбалансированные деревья
2.5. Перечислимый тип
Логическая структура.
Перечислимый тип представляет собой упорядоченный тип данных, определяемый программистом, т.е. программист перечисляет все значения, которые может принимать переменная этого типа. Значения являются неповторяющимися в пределах программы идентификаторами, количество которых не может быть больше 256, например,
type color=(red,blue,green);
work_day=(mo,tu,we,th,fr);
winter_day=(december,january,february);
Машинное представление.
Для переменной перечислимого типа выделяется один байт, в который записывается порядковый номер присваиваемого значения. Порядковый номер определяется из описаного типа, причЯм нумерация начинается с 0. Имена из списка перечислимого типа являются константами, например,
var B,С:color;
begin B:=bluе; (* B=1 *)
C:=green; (* С=2 *)
Write(ord(B):4,ord(C):4); end.
После выполнения данного фрагмента программы на экран будут выданы цифры 1 и 2. Содержимое памяти для переменных B И C при этом следующее:
В - 00000001; С - 00000010.
Операции.
На физическом уровне над переменными перечислимого типа определены операции создания, уничтожения, выбора, обновления. При этом выполняется определение порядкового номера идентификатора по его значению и, наоборот, по номеру идентификатораего значение.
На логическом уровне переменные перечислимого типа могут быть использованы только в выражениях булевского типа и в операциях сравнения; при этом сравниваются порядковые номера значений.
2.6. Интервальный тип
Логическая структура.
Один из способов образования новых типов из уже существующих - ограничение допустимого диапазона значений некоторого стандартного скалярного типа или рамок описанного перечислимого типа. Это ограничение определяется заданием минимального и максимального значений диапазона. При этом изменяется диапазон допустимых значений по отношению к базовому типу, но представление в памяти полностью соответствует базовому типу.
Машинное представление.
Данные интервального типа могут храниться в зависимости от верхней и нижней границ интервала независимо от входящего в этот предел количества значений в виде, представленном в таблице 2.4. Для данных интервального типа требуется память размером один, два или четыре байта, например,
var A: 220..250; (* Занимает 1 байт *)
В: 2221..2226; (* Занимает 2 байта *)
C: 'A'..'K'; (* Занимает 1 байт *)
begin A:=240; C:='C'; B:=2222; end.
После выполнения данной программы содержимое памяти будет следующим:
A - 11110000; C - 01000011; B - 10101110 00001000.
Операции.
На физическом уровне над переменными интервального типа определены операции создания, уничтожения, выбора, обновления. Дополнительные операции определены базовым типом элементов интервального типа.
Базовый тип |
Максимально допустимый диапазон |
Размер требуемой памяти |
ShortInt |
-128..127 |
1 байт |
Integer |
-32768..32767 |
2 байта |
LongInt |
-2147483648..2147483647 |
4 байта |
Byte |
0..255 |
1 байт |
Word |
0..65535 |
2 байта |
Char |
chr(ord(0))..chr(ord(255)) |
1 байт |
Boolean |
False..True |
1 байт |
Таблица 2.4
Примечание: запись chr(ord(0)) в таблице следует понимать как: символ с кодом 0.
А) Интервальный тип от символьного: определение кода символа и, наоборот, символа по его коду.
Пусть задана переменная типа tz:'d'..'h'. Данной переменной присвоено значение 'e'. Байт памяти отведенный под эту переменную будет хранить ASCII-код буквы 'e' т.е. 01100101 (в 10-ом представлении 101).
Б) Интервальный тип от перечислимого: определение порядкового номера идентификатора по его значению и, наоборот, по номеру идентификатора - его значение.
На логическом уровне все операции, разрешенные для данных базового типа, возможны и для данных соответствующих интервальных типов.