- •Структура и алгоритмы обработки данных
- •Понятие алгоритма и структуры данных.
- •Анализ сложности и эффективности алгоритмов и структур данных.
- •Данные числовых типов. Данные целочисленного типа. Данные вещественного типа.
- •Данные числовых типов. Операции над данными числовых типов. Данные символьного типа.
- •Данные логического типа. Данные типа указатель.
- •Линейные структуры данных. Массив.
- •Линейные структуры данных. Строка.
- •Линейные структуры данных. Запись.
- •Линейные структуры данных. Множество.
- •Линейные структуры данных. Таблица.
- •Линейные структуры данных. Линейные списки. Циклические списки.
- •Линейные структуры данных. Разреженные матрицы.
- •Линейные структуры данных. Стек.
- •Линейные структуры данных. Очередь.
- •Линейные структуры данных. Дек.
- •Нелинейные структуры данных. Мультисписки. Слоенные списки.
- •Нелинейные структуры данных. Графы. Спецификация.
- •Нелинейные структуры данных. Графы. Реализация.
- •Нелинейные структуры данных. Деревья. Общие понятия.
- •Нелинейные структуры данных. Деревья. Обходы деревьев.
- •Нелинейные структуры данных. Деревья. Спецификация двоичных деревьев. Реализация. Основные операции.
- •Файлы. Организация.
- •Файлы. В-деревья. Представление файлов в-деревьями.
- •Файлы. В-деревья. Основные операции.
- •Файлы. В-деревья. Общая оценка в-деревьев.
- •Методы разработки алгоритмов. Метод декомпозиции. Динамическое программирование.
- •Методы разработки алгоритмов. Поиск с возвратом. Методы ветвей и границ.
- •Алгоритмы поиска. Поиск в линейных структурах.
- •Алгоритмы поиска. Хеширование данных.
- •Алгоритмы поиска. Использование деревьев в задачах поиска.
- •Алгоритмы поиска. Поиск в тексте.
- •Алгоритмы кодирования (сжатия) данных.
- •Алгоритмы сортировки. Сортировка подсчетом. Сортировка простым включением.
- •Алгоритмы сортировки. Сортировка методом Шелла. Сортировка простым извлечением.
- •Алгоритмы сортировки. Древесная сортировка. Сортировка методом пузырька.
- •Алгоритмы сортировки. Быстрая сортировка (Хоара). Сортировка слиянием.
- •Алгоритмы сортировки. Сортировка распределением. Сравнение алгоритмов внутренней сортировки.
- •Алгоритмы обхода графа. Поиск в глубину.
- •Алгоритмы обхода графа. Поиск в ширину (волновой алгоритм).
Данные логического типа. Данные типа указатель.
Значениями логического типа может быть одна из предварительно объявленных констант false (ложь) или true (истина).
Данные логического типа занимают один байт памяти. При этом значению false соответствует нулевое значение байта, а значению true любое ненулевое значение байта.
Над логическими типами возможны операции булевой алгебры – НЕ (not), ИЛИ (or), И (and), ИСКЛЮЧАЮЩЕЕ ИЛИ (xor). Последняя операция реализована для логического типа не во всех языках.
Кроме того, следует помнить, что результаты логического типа получаются при сравнении данных любых типов.
Данные типа указатель
Тип указателя представляет собой адрес ячейки памяти. Физическое представление адреса существенно зависит от аппаратной архитектуры вычислительной системы.
В языках программирования высокого уровня определена специальная константа nil, которая означает пустой указатель или указатель, не содержащий какой-либо конкретный адрес.
В языках высокого уровня указатели могут быть типизированными и нетипизированными. При объявлении т и п и з и р о в а н н о г о указателя определяется и тип данного в памяти, адресуемого этим указателем.
Н е т и п и з и р о в а н н ы й указатель служит для представления адреса, по которому содержатся данные неизвестного типа. В Паскале это тип pointer. Работа с нетипизированными указателями существенно ограничена, они могут использоваться только для сохранения адреса, а обращение по адресу, задаваемому нетипизированным указателем, невозможно.
Основными операциями, в которых участвуют указатели, являются присваивание, получение адреса, выборка.
Присваивание является двухместной операцией, оба операнда которой указатели. Как и для других типов, операция присваивания копирует значение одного указателя в другой, в результате оба указателя будут содержать один и тот же адрес памяти. Если оба указателя, участвующие в операции присваивания типизированные, то оба они должны указывать на данные одного и того же типа.
Операция получения адреса – одноместная, ее операнд может иметь любой тип. Результатом является типизированный указатель, содержащий адрес операнда.
Операция выборки – одноместная, ее операндом является типизированный указатель. Результатом этой операции являются данные, выбранные из памяти по адресу, заданному операндом. Тип результата определяется типом указателя.
Линейные структуры данных. Массив.
Массив – это поименованная совокупность однотипных элементов, упорядоченных по индексам, определяющих положение элемента в массиве.
Тип индекса, в общем случае, может быть любым порядковым, но некоторые языки программирования поддерживают в качестве индексов массивов только последовательности целых чисел.
Количество используемых индексов определяет размерность массива. Массив может быть одномерным (вектор), двумерным (матрица), трехмерным (куб) и т. д.:
var
Vector: array [1..100] of integer;
Matrix: array [1..100, 1..100] of integer;
Cube: array [1..100, 1..100, 1..100] of integer;
Можно также выполнять операции над отдельными элементами массива. Перечень таких операций определяется типом элементов. Доступ к отдельным элементам массива осуществляется через имя массива и индекс (индексы) элемента:
Cube[0,0,10] := 25;
Matrix[10,30] := Cube[0,0,10] + 1;
В памяти ЭВМ элементы массива обычно располагаются непрерывно, в соседних ячейках. Размер памяти, занимаемой массивом, есть суммарный размер элементов массива.