
- •Конспект лекций по курсу Программирование на языке высокого уровня.
- •Часть I. Структурное программирование
- •Автор: доцент Шустова л.И.
- •Часть II. Структуры данных 16
- •Часть III. Методы сортировки 97
- •Понятие системы программирования
- •Типы и назначение файлов
- •Директива#include
- •Директива #define
- •Директива условной генерации
- •Основы ввода/вывода
- •Вывод данных
- •Ввод данных
- •Определение и использование функций
- •Функция вычисления факториала числа.
- •Функция возведения вещественного числа в целую степень
- •Функция, меняющая местами значения двух параметров
- •Описание массива
- •Пример программы с использованием массива целых чисел
- •Абстрактные структуры данных
- •Определение
- •Базовые структуры данных
- •Очереди и стеки
- •Деревья
- •Внутренние структуры данных
- •Векторы
- •Отображение абстрактных структур данных на внутренние
- •Строка-вектор
- •1. Функция сцепления двух строк.
- •2. Функция поэлементного сравнения двух строк.
- •3. Функция разбиения строки.
- •4. Функция нахождения подстроки в строке.
- •Строка-список
- •1. Сцепление двух строк.
- •2. Поэлементное сравнение двух строк.
- •3. Разбиение строки на несколько частей.
- •4. Функция нахождения подстроки в строке.
- •Стек-вектор
- •Стек-список
- •Очереди
- •Очередь-вектор
- •Очередь-список
- •Деревья
- •Классификация таблиц
- •Способ работы с таблицей
- •Способ доступа к таблице
- •Просматриваемые таблицы
- •Просматриваемая таблица-вектор
- •Статическая просматриваемая таблица-вектор
- •Динамическая просматриваемая таблица-вектор
- •Просматриваемая таблица-список
- •Упорядоченные таблицы
- •Упорядоченная таблица-вектор
- •Динамическая упорядоченная таблица-вектор
- •Перемешанные таблицы
- •Открытое перемешивание
- •Перемешивание сцеплением
- •Деревья поиска
- •Бинарное дерево
- •Многоходовые деревья
- •Структура вершины в-дерева
- •Операция вставки
- •Удаление элемента
- •Перераспределение элементов
- •Сцепление вершин
- •Операция включения
- •Удаление элемента
- •Методы сортировки
- •Введение
- •Классификация методов внутренней сортировки
- •Быстрая сортировка
- •Распределительные сортировки
- •Сортировка поразрядным группированием
- •Сортировка вычислением адреса
Описание массива
Одномерный массив с соответствующими средствами работы с ним. Представление в С/С++. Одномерный массив, для которого определен оператор индексирования. Требование: все элементы массива имеют один и тот же тип, но язык не накладывает ограничения на тип элемента массива.
Описание массива в С/С++:
тип_элементаимя_массива [количество_элементов ][ = {значение_1, значение_2, ...}], ...;
имя_массивав С/С++ представляет собойадресную константу, значение которой – адрес размещения первого элемента массива в памяти.
Примеры:
int a[12], b[3] = {1, 5, 8};
char s[] = {'w', 'o', 'r', 'd', '\0'};
Доступ к элементам массива – с помощью оператора индексирования []и индекса, значение которого изменяется от 0 до (количество_элементов– 1), например:b[0]имеет значение 1,b[1]имеет значение 5,b[2]имеет значение 8:
b
1
b[0]
5
b[1]
8 b[2]
int
(слово)
Важно: в С/С++ []– этодвухместный оператор, первый операнд которого – адрес (или указатель на ...), а второй – целое. В С++ операнды могут задаваться в произвольном порядке, то есть, справедливы записи и b[i], иi[b].
Пример программы с использованием массива целых чисел
Многомерные массивы
Многомерные массивы: особенности инициализации и использования.
Примеры программ с использованием массивов.
Массивы символов
Массивы символов: особенности инициализации, например:
char s[] = "word";
Многомерные массивы символов
Примеры программ с использованием массивов символов
Указатели: понятие указателей, их определение в программе, операции для работы с указателями. Связь указателей с массивами. Адресная арифметика. Использование указателей для передачи аргументов в функции. Массивы указателей. Указатели на массивы. Указатели на указатели. Производные типы: структуры и объединения. Определение и инициализация структур. Массивы структур. Сложные структуры (содержащие массивы, структуры, указатели на себя).
Понятие указателя в С. Адресная арифметика
Примеры программ с использованием указателей
Структуры данных
Уровни представления информации
Любая программа реализует обработку информации, предполагающую преобразование некоторой входной информации в выходную. С точки зрения программирования информацию, подлежащую обработке, обычно определяют какданные. Отсюда, любая программа реализуетобработку данных.
Под даннымиобычно понимают любой набор знаков, рассматриваемый безотносительно к его содержательному смыслу. С точки зрения программирования данные можно рассматривать как совокупность некоторых информационных единиц (элементов), между которыми существуют определенные отношения. Эти отношения представляют собойструктуру данных.
Когда программист приступает к разработке некоторого программного продукта, существенной частью его работы является осознание свойств информации, которая будет обрабатываться. В процессе разработки программного продукта и осознания свойств информации достаточно четко выделяются три уровня абстракции в представлении информации:
Интуитивныеструктуры информации – это внутренне присущая самой информации характеристика, отражающая смысл данных. Программист пытается осознать эту характеристику, выделить и применить к ней имеющиеся у него схемы. Интуитивные структуры информации принято делить на два типа: иерархическую и ассоциативную.
В иерархическойструктуре можно с той или иной степенью точности выделить отношения подчинения одной части или элемента информации другой.
В ассоциативнойструктуре существуют более сложные взаимосвязи, и установить отношение подчиненности, разделить информацию на отдельные элементы не всегда возможно.
Абстрактныеструктуры информации – это тот или иной формальный способ интерпретации интуитивной структуры. Без такой формализации невозможно представить в программных продуктах требуемую информацию. Для представления одной и той же интуитивной структуры могут быть использованы различные абстрактные структуры – естественно, с разной степенью точности.
В интуитивных структурах содержится много информации. Отобразить всю эту информацию в абстрактных структурах часто не представляется возможным, так как это может привести, с одной стороны, к серьезному усложнению структуры данных и, соответственно, усложнению программного продукта, а с другой стороны, к хранению информации, обработка которой в данном конкретном программном продукте не требуется. Поэтому в каждом конкретном случае необходимо решать, насколько подробно в абстрактной структуре данных должна быть представлена интуитивная структура, и как организовать доступ к любой части информации. Чтобы принять такое решение, необходимо знать, какие операции будут выполняться с данными. Поэтому в связи с каждой задачей необходимо рассматривать не только организацию данных, но и класс операций, выполняемых с этими данными; все это вместе и определяет структура данных.
Конкретныеструктуры информации – это способы представления соответствующих абстрактных структур в памяти ЭВМ.
Абстрактные структуры называют также логическимиструктурами или простоструктурами данных; конкретные структуры называют ещевнутреннимиструктурами.
В процессе разработки программного продукта разработчик на разных этапах разработки имеет дело с разными типами информационных структур: на этапе анализа – с интуитивными структурами информации, на этапе проектирования – с абстрактными структурами и на этапе реализации – с конкретными структурами.
В дальнейшем будут рассматриваться абстрактные и конкретные структуры данных.