Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования «Московский государственный
университет экономики, статистики и информатики (МЭСИ)»
Кафедра АсоИу
КУРСОВАЯ РАБОТА
по дисциплине
«Технологии программирования»
Тема: «Работа с динамическими типами данных. Двусвязный список. Редактирование элемента»
Выполнил: студент группы ДКА-201
Иванов В.
Проверил:
Старший преподаватель
Хрипков Д.В.
Москва 2012
Содержание
1. Динамическая память. Динамические структуры данных. Двунаправленный кольцевой список с головным элементом ………………………………………………………………….3
2. Постановка задачи………………...…………………………………………………………14
3. Описание работы…………………………………………………………………………….15
4. Тестирование…………………………………………………………………………………16
5. Список материалов…………………………………………………………………………..20
6. Листинг……………………………………………………………………………………….21
Динамические списки
Память, выделяемая в процессе выполнения программы, называется динамической. После выделения динамической памяти она сохраняется до ее явного освобождения, что может быть выполнено только с помощью специальной операции или библиотечной функции.
Достоинства динамической памяти:
- экономичность и эффективность ее использования;
- возможность динамического изменения числа элементов в связанных структурах, например, списках (в статической памяти число элементов фиксировано для каждой компиляции);
- статические переменные существуют только в течение жизни блока, в котором они объявлены, а динамические - и после выхода из блока до окончания программы, а на практике – столько, сколько нужно по алгоритму;
- переменная, размещаемая динамически, не объявляется в разделе VAR и не имеет имени в программе («невидимка»). Компилятор не планирует выделение места в памяти под такие переменные.
Недостатки динамической памяти:
- усложняются процессы выделения и освобождения динамической памяти по сравнению со статической;
- усложняются алгоритмы обработки данных, представленных динамическими структурами.
В процессе выполнения программы участок динамической памяти доступен везде, где доступен указатель, адресующий этот участок. Таким образом, возможны следующие три варианта работы с динамической памятью, выделяемой в некотором блоке (например, в теле неглавной функции).
Указатель (на участок динамической памяти) определен как локальный объект автоматической памяти. В этом случае выделенная память будет недоступна при выходе за пределы блока локализации указателя, и ее нужно освободить перед выходом из блока.
Указатель определен как локальный объект статической памяти. Динамическая память, выделенная однократно в блоке, доступна через указатель при каждом повторном входе в блок. Память нужно освободить только по окончании ее использования.
Указатель является глобальным объектом по отношению к блоку. Динамическая память доступна во всех блоках, где "виден" указатель. Память нужно освободить только по окончании ее использования.
Все переменные, объявленные в программе, размещаются в одной непрерывной области памяти, которую называют сегментом данных. Такие переменные не меняют своего размера в ходе выполнения программы и называются статическими. Размера сегмента данных может быть недостаточно для размещения больших объемов информации. Выходом из этой ситуации является использование динамической памяти. Динамическая память – это память, выделяемая программе для ее работы за вычетом сегмента данных, стека, в котором размещаются локальные переменные подпрограмм и собственно тела программы.
Для работы с динамической памятью используют указатели. С их помощью осуществляется доступ к участкам динамической памяти, которые называются динамическими переменными. Для хранения динамических переменных выделяется специальная область памяти, называемая "кучей".
Указатель может находиться в одном из трех состояний, а именно:
не инициализирован;
содержит адрес размещения;
содержит значение предопределенной константы nil; такой указатель называется пустым, то есть не указывает ни на какую переменную.
Указатель со значением nil содержит 0 в каждом из четырех байтов.
Указатели можно
сравнивать с другими указателями,
присваивать им адрес или значение другого указателя,
передавать как параметр.
Указатель нельзя
отпечатать;
вывести на экран.