- •Содержание
- •Введение
- •Структуры данных Классификация структур данных
- •Операции над данными
- •Понятие алгоритма
- •Массивы Описание массива
- •Представление массивов в памяти
- •Рис 1. Представление вектора в памяти
- •Рис 2. Представление вектора ml в памяти
- •Алгоритмы поиска
- •Алгоритмы сортировки
- •Пример сортировки простыми вставками.
- •Описание записи
- •Операции над записями
- •Записи с вариантами
- •Представление записи в памяти
- •Общие процедуры и функции для работы с файлами
- •Процедуры и функции для работы с типизированными файлами.
- •Сортировка содержимого файлов (Внешняя сортировка)
- •Пример внешней сортировки прямым слиянием
- •Пример внешней сортировки естественным слиянием
- •Динамическая память и данные с динамической структурой
- •Ссылочный тип в языке Pascal
- •Типизированные указатели
- •Нетипизированные указатели
- •Операции над переменными ссылочного типа.
- •Динамические списки
- •Реализация списков на языке Pascal.
- •Стек, очередь, дек
- •Рекурсия
- •Нелинейные структуры данных. Деревья
- •Бинарные деревья
- •Реализация бинарных деревьев
- •Способы обхода бинарных деревьев
- •Сортировка с прохождением бинарного дерева
Операции над данными
Над любыми данными могут выполняться четыре общие операции: создание, уничтожение, выбор (доступ), обновление.
- Операция создания заключается в выделении памяти для структуры данных. Память может выделяться в процессе выполнения программы или на этапе компиляции.
В Pascal'e (Var I:integer) в результате описания типа будет выделена память для соответствующих переменных. Для структур данных, объявленных в программе, память выделяется автоматически средствами систем программирования либо на этапе компиляции, либо при активизации процедурного блока, в котором объявляются соответствующие переменные. Программист может и сам выделять память для структур данных, используя имеющиеся в системе программирования процедуры/функции выделения/освобождения памяти. В объектно-ориентированных языках программирования при разработке нового объекта для него должны быть определены процедуры создания и уничтожения.
Главное заключается в том, что независимо от используемого языка программирования, имеющиеся в программе структуры данных, не появляются «из ничего», а явно или неявно объявляются операторами создания структур. В результате этого всем экземплярам структур в программе выделяется память для их размещения.
- Операция уничтожения противоположна по своему действию операции создания. Некоторые языки, такие как BASIC, FORTRAN не дают возможности программисту уничтожать созданные структуры данных, В языках PL/1, С, PASCAL структуры данных, имеющиеся внутри блока, уничтожаются в процессе выполнения программы при выходе из этого блока. Операция уничтожения помогает эффективно использовать память.
- Операция выбора используется программистами для доступа к данным внутри самой структуры. Форма операции доступа зависит от типа структуры данных, к которой осуществляется обращение. Метод доступа - один из наиболее важных свойств структур, особенно в связи с тем, что это свойство имеет непосредственное отношение к выбору конкретной структуры данных.
- Операция обновления позволяет изменить значения данных в структуре данных. Примером операции обновления является операция присваивания, или, более сложная форма — передача параметров.
Вышеуказанные четыре операции обязательны для всех структур и типов данных. Помимо этих общих операций для каждой структуры данных могут быть определены операции специфические, работающие только с данными данного типа (данной структуры). Специфические операции рассматриваются при рассмотрении каждой конкретной структуры данных.
Работа с данными тесно связана с понятием «алгоритм».
Понятие алгоритма
Алгоритм - это строгая чёткая конечная система правил, которая определяет последовательность действий над некоторыми объектами и после конечного числа шагов приводит к достижению поставленной цели (т.е. эту систему правил как инструкцию можно вручить разным людям незнакомым с сутью дела и они, следуя этой системе правил, будут действовать одинаково).
Появлялись задачи, для которых невозможно было построить алгоритмы и нельзя было доказать невозможность алгоритмического решения задачи. Следовательно, возникла проблема: построить формальное определение алгоритма.
Формализация понятия алгоритма.
Объекты реального мира можно построить словами в различных алфавитах, Слово — это любая конечная последовательность букв. Это позволяет считать, что объектами работы алгоритма могут быть только слова. На основе такого положения определяется уточнённое понятие алгоритма.
Алгоритм - это чёткая конечная система правил для преобразования слов из некоторого алфавита в слова этого же алфавита (входному слову соответствует выходное слово). Осталось формально описать действия над объектами-словами и порядок этих действий.
Алгоритм - конечная последовательность инструкций, каждая из которых имеет четкий смысл и может быть выполнена за конечными вычислительными затратами за конечное время.
Особенности алгоритма:
Конечность — алгоритм всегда должен заканчиваться после выполнения конечного числа шагов (не просто конечное число шагов, а достаточно ограниченное, разумное число шагов);
Определенность — каждый шаг алгоритма должен быть строго определен;
Ввод – алгоритм имеет некоторое (возможно равное 0) число входных данных, т.е. величин, которые задаются до начала его работы или определяются динамически во время его работы;
Вывод — у алгоритма есть одно или несколько выходных данных, т.е. величин, имеющих вполне определенную связь с входными данными;
Эффективность - алгоритм обычно считается эффективным, если все его операторы достаточно просты для того, чтобы их можно было выполнить в течение конечного промежутка времени с помощью карандаша и бумаги.
Критерии качества алгоритма: время, необходимое для его выполнения, т.е. сколько раз выполняется каждый шаг; адаптируемость к различным компьютерам; простота; изящество и т.д.