- •Введение
- •Фундаментальные структуры данных:
- •Последовательные файлы
- •Буферизованная последовательность.
- •Стандартные ввод и вывод.
- •Рекурсия в алгоритмах
- •Алгоритмы поиска
- •Поиск деления пополам, бинарный поиск
- •Поиск в таблицах
- •Алгоритмы сортировки
- •Сортировка массивов
- •Сортировка прямым выбором
- •Сортировка с помощью прямого обмена
- •Оптимизация алгоритмов пузырьковой сортировки
- •Улучшенный метод сортировки
- •Сортировка с помощью дерева.
- •Эффективная организация дерева из n элементов.
- •Сортировка с помощью разделения.
- •Медианы и порядковые статистики
- •Использование QuickSort
- •Сортировка последовательности Метод прямого слияния
- •Организация динамических списков.
- •Поиск и включение в упорядоченном списке
- •Топологическая сортировка.
- •Деревья
Последовательные файлы
В любом случае в файле существует записи с разными типами.
Type T=File of To; S n (длина файла) S=(S0,S1,..,Sn-1)
Отличие файла от массива заключается в то, что у файлов число элементов всегда открыто. Каждый файл в конкретный момент имеет конечную длину, хотя мощность файлового типа бесконечно. Невозможно выделить для соответствующей переменной память заданного размера. Выделяем память в процессе работы, увеличиваем и возвращаем память при усечении файла. Это динамическая схема распределения памяти.
Естественный доступ к записи файлов – последовательно. Следовательно, файл просматривается от текущего элемента к следующему и формируем файл добавлением элементов только в конец файла. Исключение составляет текущий элемент файла. Последовательный доступ дает возможность использование эффективной буферизации. Когда при перекачки данных между памятью различного вида используется потоки данных. Буферизация предполагает, что части потока накаливаются в буферах. Когда буфер заполнен, он сбрасывает себя в нужном направлении. Метод буферизации включен в любую файловую систему.
Элементарные операции над файлами.
Множества элементарных операций над файлами должны входить операции формирования и контроля. С каждой файловой переменной всегда связана позиция.
Open(s) Определяет s как пустую файловую переменную.
Write(s,x) Добавляет элемент со значением х в конец файла s.
Reset(s) Устанавливает текущую позицию в конец файла.
Read (s,x)
Присваивает текущий элемент файла s в переменную х. Позиция должна переместиться к следующему элементу
Операции считаю, как процедуры. Т.к. тип файловой переменной фигурирует в списке параметров, то его нужно описать. Для его описания используется запись record, в ней должно быть поле массив для моделирования последовательности данных в файле. Поле для текущей позиции и поле фиксирующее текущую длину файлов.
Введен тип Boolean который покажет верно ли выполнена операция.
Unit File system; Interface Const MaxLenght=4096; Type Seguence=record; pos__,length__:word; eof__:boolean; a:array [0..4096-1] of word; end; Procedure Open(var f:sequence); Procedure write (var f:sequence; w:word); Procedure Reset (var f:sequence); Procedure Read (var f:sequence; w:word); Procedure Close (var f:sequence); Implementation Procedure Open; begin f.pos_:=0; f.Lenght:=0; f.eof_:=False; end; Procedure write; begin with f do begin a[pos]:=w; pos_:=pos+1; length_:=pas_ end else Halt; end;end; Procedure Reset; begin f.pos_:=0; f.eof_:=False; end; Procedure Read; begin with f do begin if pos_:=length_ then eof_:=True else begin w:=a[pos_]; pos_:=pos_+1; end;end;end; Procedure Close; begin end;
Буферизованная последовательность.
Фактически диск рассматривается как массив блоков, которые читаются или записываются целиком. Буферизация используется следующим образом. Данные собираются в буферную переменную в оперативной памяти и когда по количеству данных накапливается блок, этот блок передается.
Буферизация позволит производителю и потребителю работать с буфером в определенной степени независимо друг от друга. Буфер представляет собой очередь. Принцип работы очереди: первый пришел, первый ушел. FIFO
Если эта структура является массивом, то организуется 2 переменные. In,out – будут указывать позиции, в которых записаны элементы in и из которыз извлекается out. Однажды прочитанный элемент больше не используется. Буфер программируется как циклическая или кольцевая очередь.
Кроме обработки позиции in out, фиксируется реальное заполненое число элементов в буфере. Существуют проблемы синхронизации работы нескольких задач при программировании буфера. Синхронизацию реализуют с помощью сигналов на уровне операционной системы.