- •«Утверждаю»
- •Учебно-методический комплекс
- •Астана 2010 График выполнения и сдачи заданий по дисциплине
- •Карта учебно-методической обеспеченности дисциплины Учебники, учебные пособия
- •Конспект лекционных занятий
- •Тема 1. Введение в программирование на Си. Структура программы. Директивы препроцессора. Типы данных.
- •Основные операции в языке Си.
- •Преобразование типов
- •Тема 2. Управляющие структуры. Выбор вариантов. Структура выбора If, If – Else, логические операции, операция условия, множественный выбор.
- •Тема 3. Управляющие структуры. Структуры повторения While, do – While, For. Управляющие операторы break и continue.
- •Тема 4. Массивы. Разработка программ с использованием одномерных и двумерных массивов.
- •Тема 5. Функции в Си. Создание и использование функций.
- •Тема 6. Классы памяти и разработка программ.
- •Тема 7. Указатели в Си.
- •Тема 8. Использование указателей при обработке одномерных и двумерных массивов.
- •Тема 9. Символы и строки в Си.
- •Функции сравнения из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 6.
- •Функции поиска из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 7.
- •Другие функции из библиотеки обработки строк. В таблице 8 приведены прототипы и краткое описание остальных функций из библиотеки обработки строк.
- •Ниже приведены примеры программы, использующих функции работы со троками.
- •Тема 11. Структуры данных в Си.
- •Тема 12. Динамические структуры данных.
- •Тема 13. Работа с файлами в Си.
- •Тема 14. Графика в Си.
- •Тема 15. Объектно-ориентированное программирование.
- •Методические рекомендации по выполнению лабораторных заданий
- •Лабораторная работа № 3. Использование операторов цикла при решении задач.
- •Лабораторная работа №4. Разработка программ с использованием одномерных массивов.
- •Лабораторная работа №5. Разработка программ с использованием двумерных массивов.
- •Лабораторная работа № 6. Программирование задач с использованием нескольких функций на языке Си.
- •Лабораторная работа № 8. Программирование задач обработки структур данных.
- •Лабораторная работа № 9. Разработка программ с использованием файловых переменных.
- •Лабораторная работа № 10. Разработка программ с использованием графических функций языка Си.
- •Содержание отчета по выполнению лабораторной работы
- •1 Задание
- •Тема 1. Запись констант, стандартных функций, выражений, операторов присваивания. Запись программ линейных структур алгоритмов.
- •Тема 2. Алгоритмическое описание, запись программ линейных, разветвляющихся.
- •Тема 3. Алгоритмическое описание, запись программ циклических структур алгоритмов.
- •Тема 4. Алгоритмическое описание, составление программ обработки одномерного массива.
- •Тема 5. Алгоритмическое описание, составление программ обработки двумерного массива.
- •Тема 6-7. Составление программ решения задач с использованием функции.
- •Рекомендуемая литература:
- •Тема 8-9. Составление программ решения задач обработки массивов с использованием указателей.
- •Тема 10-11. Программирование задач обработки символьных и стрковых данных.
- •Рекомендуемая литература.
- •Тема 12. Методы сортировки.
- •Тема 13. Составление программ решения задач с использованием структур данных.
- •Тема 14. Составление программ решения задач с использованием файла произвольного доступа.
- •Рекомендуемая литература.
- •Тема 15. Алгоритмизация графических построений.
- •Варианты заданий:
- •Сведения
- •Перечень экзаменационных вопросов по пройденному курсу
- •Глоссарий
Тема 12. Динамические структуры данных.
Динамические структуры данных – это структуры данных, размер которых может изменяться (увеличиваться или уменьшаться) при исполнении программы. Связанный список – это набор «выстроенных в ряд» элементов данных, в любом месте которого можно производить вставки и удаления. Стеки допускают выполенение вставки и удаления только с одного конаца стека – сверху. Очереди представляют собой линии ожидания: вставки производятся в конец (иначе наываемый хвостом) очереди, а удаление – в начале (называемом ещё головой) очереди. Двоичные деревья облегчают скоростной поиск и сортировку данных, эффективное устранение повторяющихся элементов данных, представление файловой стркутры каталогов и компиляцию выражений в машинный язык.
Структуры, ссылающиеся на себя. Структуры, ссылающиеся на себя, содержат в качестве элемента указатель, который ссылается на структуру того эе типа. Например, определение
structnode{
int data;
struct node *nextptr;
};
описывает тип structnode. Структура типаstructnodeсостоит из двух элементов – целогоdataи указателяnextPtr. ЭлементnextPtrуказывает на структуру типаstructnode– структур того же самого типа, что и только объявленная. ЭлементnextPtrиногда называют связкой, т.е.nextPtrможно использовать для того, чтобы связать структуру типаstructnodeс другой структурой того же типа.
Динамическое распределение памяти. Создание и использование динамических структур данных требует динамического распределения памяти – возможности получать в процессе исполнения дополнительную память для хранения новых узлов и освобождать блоки памяти, ставшие ненужными. Максимальный размер выделяемой динамической памяти определяется доступной физической памятью компьютера или доступным виртуальным адресным пространством в системе с виртуальной памятью. Для динамического распределения памяти необходимо применение функцийmallocиfree, а также операцияsizeof. Функцияmallocпринимает в качестве аргумента число байт, которое необходимо выделить, и возвращает указатель на выделенную память типаvoid*. Указательvoid* можно присвоить любой переменной-указателю. Функцияmallocобычно используется совместно с операциейsizeof. Если необходимого количества памяти нет в наличии,mallocвозвращает указательNULL. Функцияfreeосвобождает память, т.е. память возвращается системе, и в дальнейшем ее можно выделить снова.
Связанные списки. Связанные списки – это линейный набор ссылающихся на себя структур, называемых узлами, и объединенных указателем-связкой. Доступ к связанному списку обеспечивается указателем на первый узле списка. Доступ к следующим узлам производится через связывающий указатель, хранящийся в каждом узле. По общему соглашению связывающий указатель в последнем узле списка устанавливается вNULL, отмечая конец списка. Данные хранятся в связанном списке динамически – каждый узел создается по мере необходимости. Узел может содержать данные любого типа, включая другие структуры. Связанный список удобен, когда заранее не известно, сколько элементов данных будет содержать структура. Связанные списки могут содержаться в сортированном виде, если помещать каждый новый элемент в соответствующую позицию списка.
Стеки. Стек – это упрощенный вариант связанного списка. Новые узлы могут добавляться в стек и удаляться из стека только сверху. По этой причине, стек часто называют структурой вида последним пришел – первым вышел (LIFO). На стек ссылаются через указатель на верхний элемент стека. Связывающий элемент в последнем узле стека установлен равнымNUL, чтобы пометить границу стека.
Очереди.В очереди узлы удаляются только с головы, а добавляются только в хвост очереди. По этой причине очереди часто называют структурами данным типа первым пришел – первым ушел (FIFO).
Деревья.Дерево является нелинейной структурой, двумерной структурой данных с особыми свойствами. Узлы дерева содержат две или более связей. Двоичные деревья – деревья, узлы которых содержат только две связки. Первый узел дерева называется корневым. Каждая связь корневого узла ссылается на потомка. Левый потомок – первый узел левого поддерева, а правый потомок – первый узел правого поддерева. Потомки одного узла называются узлами-сиблингами. Двоичное дерево поиска (с неповторяющимися значениями в узлах) устроено так, что значения в любом левом поддереве меньше, чем значение в родительском узле, а значение в любом правом поддерево больше, чем значение в родительском узле.
Основная литература: 1осн[457-479]
Дополнительная литература:9доп[212-223], 11доп[13-16]
Контрольные вопросы:
1. Назовите линейные динамические структуры данных?
2. В чем заключается различие между связанным списком и стеком?
3. Откуда удаляются узлы в очереди?
4. Куда вставляются узлы в стеках?
5. Какое дерево является двоичным деревом поиска?