
- •1. Алгоритмы: терминология, свойства, виды, запись.
- •1.4. Операции над числовыми типами
- •2. Битовые типы
- •3. Логический тип
- •4. Символьный тип
- •5. Перечислимый тип
- •6. Интервальный тип
- •6. Статические и динамические структуры данных. Линейные и нелинейные динамические структуры.
- •7. Основные структуры данных. Множества. Массивы. Записи.
- •8. Понятия и цели сортировки. Сортировки массивов и сортировки файлов. Терминология.
- •9. Внутренняя сортировка и ее виды. Требования к методам сортировки массивов. Меры эффективности.
- •10. Простая сортировка обменом. Сравнение методов сортировки.
- •11. Сортировка простым выбором. Сравнение методов сортировки.
- •12. Сортировка простыми вставками. Сравнение методов сортировки.
- •13. Шейкер-сортировка. Сравнение методов сортировки.
- •14. Сортировка включениями с убывающим приращением (сортировка Шелла).
- •15. Сортировка с разделением (быстрая сортировка).
- •16. Сортировка подсчетом. Сравнение методов сортировки.
- •17. Сортировка слиянием. Сравнение методов сортировки.
- •18. Внешняя сортировка. Алгоритмы внешней сортировки.
- •19. Понятие кучи. Основные процедуры и функции для работы с динамической памятью.
- •20. Динамические структуры данных. Указатели.
- •21. Динамические структуры данных. Классификация.
- •22. Связные списки. Виды связных списков. Способы представления.
- •23. Односвязные линейные списки. Последовательное распределение.
- •Интерполяционный поиск
- •47. Внешний поиск в б-деревьях.
- •48. Цифровой поиск.
19. Понятие кучи. Основные процедуры и функции для работы с динамической памятью.
Куча — это специализированная структура данных типа дерево, которая удовлетворяет свойству кучи: если B является узлом-потомком узла A, то ключ(A) ≥ ключ(B). Из этого следует, что элемент с наибольшим ключом всегда является корневым узлом кучи, поэтому иногда такие кучи называют max-кучами (в качестве альтернативы, если сравнение перевернуть, то наименьший элемент будет всегда корневым узлом, такие кучи называют min-кучами). Не существует никаких ограничений относительно того, сколько узлов-потомков имеет каждый узел кучи, хотя на практике их число обычно не более двух.
Для работы с динамической памятью используют указатели - особые переменные хранящие адреса областей памяти.
Указатели делятся на стандартные и определяемые программистом. Величины стандартного типаpointerпредназначены для хранения адресов данных произвольного типа:
var p : pointer;
Программист может определить указатель на данные или подпрограмму конкретного типа. Как и для других нестандартных типов, это делается в разделе type:
type pword = ^word; { читается как "указатель на word" } ... var pw : pword;
Такие указатели называются типизированными. Можно описать указатель на любой тип данных, кроме файловых. Тип указателя на данные можно описать и непосредственно при описании переменной:
var pw : ^word;
Для указателей определены только операции проверки на равенство и неравенство и присваивания. Правила присваивания указателей:
Любому указателю можно присвоить стандартную константу nil, которая означает, что указатель не ссылается на какую-либо конкретную ячейку памяти.
Указатели стандартного типа pointer совместимы с указателями любого типа.
Указателю на конкретный тип данных можно присвоить только значение указателя того же или стандартного типа.
20. Динамические структуры данных. Указатели.
Динамические структуры данных создаются (т.е. размещаются в оперативной памяти) во время исполнения программы. Статические данные размещаются при загрузке программы и занятая ими память не может быть освобождена или использована для других целей во время исполнения программы
Схема динамического размещения данных:
Должна быть описана переменная - УКАЗАТЕЛЬ на создаваемую структуру данных. Указатель - это специальный тип данных, хранящий адрес начала участка памяти, выделяемой данной структуре.
При помощи процедуры New или GetMem с этой переменной связывается (выделяется) необходимый объем памяти из зоны памяти, называемой кучей (heap), причем переменной присваивается адрес начала выделенной памяти. Выделение означает, что система запрещает доступ к этой памяти посторонним. Выделеная память не инициализируется (не заполняется) ничем, т е в ней находится мусор.
Программа может использовать выделенную память. Например, если pt2 - указатель, то pt2^ используется для обращения к данным: pt2^ := 23.56; xx := sin(pt2^*pi/180); и т д. Существуют и другие способы обращения к данным, находящимся в этой области, например, использование процедур.
Динамически используемую память можно освобождать и занимать снова. При этом не гарантируется сохранность данных, т е возможно там снова мусор.
Типы указателей, описание указателей
Типизированные указатели. Описание типа имеет вид:
type <имя типа> = ^<базовый тип>;
где базовый тип - любой известный тип данных (т е в том числе - описанный ранее), кроме файлового. Пример: type pod = ^double; arab = array [1..100] of integer; par = ^arab;
Описание переменной имеет вид:
var <имя переменной> : <имя типа - указателя> или ^<базовый тип>; Пример:
var p1: pod; xs: par; xs2: ^arab;
Нетипизированные указатели (pointer). Если используется этот тип указателя, програмист должен заботиться о преобразовании данных к правильному типу например, перед выводом на экран. Описание типа не нужно (есть pointer):
Описание переменной имеет вид:
var ps1,kot,wes: pointer;