- •1.1.2 Классификация структур данных
- •1.1.3 Обозначения и договоренности
- •1.1.4 Множества.
- •1.1.5 Прямоугольные структуры. Массивы
- •Лекция 2
- •2.1 Прямоугольные структуры. Таблицы
- •2.2 Реализация с использованием параллельных массивов (статическое представление таблицы)
- •2.3 Реализация операций для неупорядоченной таблицы с использованием статической памяти
- •2.4 Динамическая память. Куча
- •2.5 Операции над указателями
- •2.6 Геометрическая интерпретация
- •2.7 Динамическая цепочка
- •2.8 Реализация операций для неупорядоченной таблицы с использованием динамической памяти
- •3.2 Обратная польская (постфиксная) запись
- •Лекция 4
- •4.1 Списковые структуры. Линейный список
- •Атом есть линейный список (атомарный);
- •Атом есть линейный список (атомарный);
- •4.2 Об операции "расчленение"
- •4.3 Логическое описание линейного списка.
- •4.4 Вычисление значения арифметического выражения
- •Лекция 5
- •5.1 Деревья
- •5.2 Бинарные деревья
- •5.5 Дерево двоичного поиска
- •7.2 Инструментальные средства. Архивация файлов (пока без сжатия)
- •7.3 Программы хранения и обработки информации
- •7.4 Код Цезаря
- •7.5 Упаковка текста
- •7.6 Код Хаффмана
- •7.7 Код Хемминга
- •7.8 Вектор Айлиффа
- •Вектор Айлиффа
- •Лекция 8
- •8.1 Сортировка – перестановка элементов линейной структуры
- •8.2 Алгоритмы сортировки Три класса алгоритмов сортировки (включением, выбором, обменом)
- •8.2.1 Сортировка простым включением.
- •9.2 Источники погрешностей
- •9.3 Классификация погрешностей
- •9.4 Терминология
- •FoRmula traNslation (станд.66, станд.77(*))
- •10.0 Бланк для записи текста программы на Фортране
- •10.1 Элементы языка
- •10.2 Типы данных и операции
- •10.3 Описание переменных и констант
- •10.4 Арифметические операции
- •11.3 Операторы присваивания
- •11.4 Оператор continue
- •11.5 Оператор безусловной передачи управления
- •11.6 Вычисляемый оператор передачи управления
- •11.7 Оператор передачи управления по предписанию
- •11.8 Арифметический оператор условной передачи управления
- •11.9 Логический оператор условной передачи управления
- •11.10 Структурный оператор условной передачи управления*
- •11.11 Оператор цикла с параметром
- •Лекция 12
- •12.1 Реализация стандартных структур
- •12.2 Операции ввода/вывода
- •12.3 Операторы ввода/вывода
- •12.4 Оператор формата (format)
- •12.5 Логическая запись
- •12.6 Взаимодействие операторов в/в и оператора format.
- •Расширенная форма оператора read
- •12.7 Управляющие символы при печати
- •12.8 Представление целого и действительного в памяти.
- •12.9 Оператор data
- •12.10 Сравнение текстовых данных
- •12.11 Функции для данных типа character
- •Лекция 13
- •13.1 Программные единицы
- •13.2 Библиотечные и встроенные функции
- •13.3 Оператор-функция
- •Правило соответствия: Списки формальных и фактических параметров согласованы по количеству, типу и порядку следования. Пример
- •13.4 Подпрограмма-функция
- •13.5 Подпрограмма-процедура
- •О соответствии фактических и формальных параметров
- •13.6 Операторы external и intrinsic
- •Пример (параметр-переменная и параметр-значение)
- •14.3 Операторы ввода и вывода.
- •14.4 Параметры операторов ввода и вывода
- •Открытие (присоединение) файла.
- •14.5 Операторы open и close
- •14.6 Оператор read
- •14.7 Оператор write
- •14.8 Другие операторы
Лекция 2
2.1 Прямоугольные структуры. Таблицы
Таблица – неограниченный набор однотипных записей, содержащих ключ.
Пусть Key и Inf - известные типы, тогда таблица B есть конечный (но не ограниченный заранее) набор записей B={зап}, где зап = record кл:Key , инф:Inf end.
На данных типа Key, как правило, определен порядок.
Частным случаем таблицы можно считать массив (с определенной натяжкой!), если в качестве Key взять множество индексов.
Таблицы можно характеризовать как неупорядоченные и упорядоченные.
Упорядоченные таблицы могут быть упорядочены по ключу и по частоте обращения. Основные операции над таблицами и их функциональные спецификации приведены в таблице.
Имя операции |
Функциональные спецификации |
Описание |
Создать |
B |
Создается пустая таблица |
Добавить |
BKeyInfB |
Добавляется запись |
Найти |
BKeyInf |
Ищется запись |
Удалить |
BKeyB |
Удаляется запись |
Пусто? |
BBoolean |
Пуста ли таблица? |
Решение этих задач зависит от типа таблицы:
неупорядоченная
упорядоченная по ключу
упорядоченная по частоте обращения.
Физическое представление с использованием параллельных массивов (ограничение размера) или с использованием динамической памяти.
2.2 Реализация с использованием параллельных массивов (статическое представление таблицы)
type
PElem=1..N;
MInf = array [PElem] of Inf;
MKey = array [PElem] of Key;
var
k:integer - количество записей в таблице.
MI:MInf; MK:MKey;
2.3 Реализация операций для неупорядоченной таблицы с использованием статической памяти
Заголовок |
Действие |
Создать (var k:integer) |
k:=0 |
Таблица пуста? (k:integer): Boolean |
Таблица пуста?:= k=0 |
Добавить в начало (var k:integer, x:Key,ii:Inf)
|
if k<N then begin for i:=k downto 1 do begin MI[k+1]:=MI[k]; MK[k+1]:=MK[k] end; k:=k+1; MI[1]:=ii; MK[1]:=x end else печать «оп. выполнить не могу» |
Добавить в конец (var k:integer,x:Key,ii:Inf)
|
if k<N then begin k:=k+1; MI[k]:=ii; MK[k]:=x end else печать «оп. выполнить не могу» |
Найти по ключу последовательный поиск(k:integer,x:Key): PElem |
k1:=1; while (k1<=k)and(MK[k1]<>x) do k1:=k1+1; Найти по ключу=k1 |
Найти по ключу бинарный поиск(k:integer,x:Key): PElem |
Сами!!! |
Удалить запись таблицы, заданную ключем, если она есть (var k:integer,x:Key)
|
k1:=Найти по ключу(k,x); if k1<=k then begin for i:=k1+1 to k do begin MI[i-1]:=MI[i];MK[i-1]:=MK[i] end; k:=k-1 end |
2.4 Динамическая память. Куча
Статической переменной (статически размещенной) называется описанная явным образом в программе переменная, обращение к которой осуществляется по имени. Место в оперативной памяти для размещения статических переменных определяется при компиляции программы и не меняется в процессе выполнения программы. Область размещения статических переменных относится к статической области памяти для данной программы.
В отличие от таких статических переменных в программах, написанных на языке ПАСКАЛЬ, могут быть созданы динамические переменные. Основное свойство динамических переменных заключается в том, что их создание (и распределение памяти под них) осуществляется пользовательской программой на этапе ее выполнения. Размещаются динамические переменные за пределами статической области памяти – в динамической области памяти (в heap-области, в куче).
Пусть Т – некоторый тип данных, t:T, тогда ^T – новый тип данных. Переменная q:^T называется типизированным указателем. Типизированный указатель предназначен для хранения адреса участка динамической памяти, куда может быть записано значение базового типа Т.
Инициализация указателя с помощью процедуры NEW(q). По запросу процедуры NEW диспетчер динамической памяти находит в динамической области памяти (в куче) свободный участок памяти, размером данного типа T, и адрес начала этого участка записывает в q. С этого момента указатель q является инициализированным, а выделенный участок имеет имя q^. Диспетчер динамической памяти считает участок q^ занятым. Для его освобождения можно использовать процедуру DISPOSE(q). Переменная q становится неопределенной (неинициализированной), а конструкция q^ – бессмысленной.
Использование указателя. Если указатель q инициализирован с помощью NEW, то q^ – имя динамической переменной типа Т. Динамическую переменную q^ можно инициализировать значением типа Т, например q^:=t.
"Заземление" – константа NIL, совместимая со всеми указателями (в частности, с типизированными указателями любых базовых типов). Можно q:=NIL, тогда q – определено (инициализировано), однако q^ – бессмысленно. Инициализированный константой NIL указатель может сравниваться с другими инициализированными указателями на равенство и неравенство.