Государственный комитет Российской Федерации по телекоммуникациям
Сибирский государственный университет
телекоммуникаций и информатики
КУРСОВАЯ РАБОТА
По дисциплине «Программирование на языках высокого уровня»
Двусвязные списки
Вариант №7
Работу выполнил:
студент 1 курса
группы ПДВ-02
Тюленев Николай Александрович
Работу проверил:
Работа защищена
«___» __________2010 г.
С оценкой «_______»
Новосибирск 2010
Содержание
Задание. 4
Введение. 5
1. Постановка комплекса задач. 7
2. Блок-схема функционирования системы.. 8
3. Структура проекта. 10
4. Исходный код. 18
5. Тестирование. 33
Заключение. 35
Разработать программу для создания и работы с двусвязным списком, состоящим из структур. Для работы со списком создать меню со следующими пунктами:
1. Создание списка.
2. Просмотр списка.
3. Добавление в конец списка новой структуры.
4. Корректировка списка.
5. Выход.
Пункт «корректировка списка» выполнить согласно своему варианту задания:
Вариант №7: структура содержит фамилию и год рождения. Добавлять новые записи так, чтобы список был упорядочен по алфавиту.
Связный список относится к одному из видов организации хранения структур данных.
Структура данных – программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих её интерфейс.
Структуры данных подразделяют на линейные и иерархические. Связный список относится к линейным структурам данных.
Связный список – структура данных, состоящая из узлов, каждый из которых содержит как собственные данные, так и одну или две ссылки на следующее и/или предыдущее поле. Основные виды списков: однократно или дважды связный, отсортированный или неотсортированный, кольцевой или некольцевой [3, стр. 264]. Двусвязный список разновидность связного списка, который содержит две ссылки – на следующее и предыдущее поле.
При написании программ очень важную роль играет правильный выбор структур данных для организации и хранения тех или иных данных. В формальных языках программирования (C/C++, C#, Java) именно структуры данных ставятся во главу угла архитектуры программного средства.
При выборе структуры данных, необходимо ясно представлять, какие задачи она будет решать. Так преимущество связного списка перед массивом в том, что их размер является динамическим (т.е. в отличие от массива для добавления нового элемента не нужно заново пересоздавать всю структуру данных и копировать данные по новому адресу). Особенно быстро вставка новых элементов осуществляется на концах связного списка.
Тем не менее, необходимо помнить, что осуществление доступа к элементу по индексу в связном списке гораздо медленнее, чем в массиве.
Таким образом, при выборе между массивами и списками нужно определить, какие действия в работе со структурой данных будут превалирующими. Если чаще всего будет осуществляться доступ к элементам структуры по индексу и лишь изредка (возможно) понадобиться добавление новых элементов, то выбирать нужно массив. Если же необходимо будет постоянно добавлять новые элементы, и при этом доступ по индексу не так важен (к примеру, главное – это сортировка элементов и вывод их на экран), то, безусловно, выбор – списки.
На примере создания связного списка:
· освоить и закрепить навыки синтаксиса языка C;
· получить базовые знания о структурах данных и их проектированию;
· получить базовые знания об алгоритмах и их программированию (на примере сортировки);
· получить опыт проектирования и создания API;
· получить опыт создания интерфейсов взаимодействия с пользователем.
Решение поставленных задач осуществляется путем написания программы, которая должна уметь создавать связный список, выводить его содержимое на экран, добавлять в конец списка новые данные, добавлять в список данные таким образом, чтобы список был упорядочен по алфавиту.
В качестве исходных входных данных, на основе которых создается список, используются данные получаемые при помощи генератора случайных чисел. Для выполнения других пунктов меню используются данные вводимые пользователем.
В программе использовались только те функции, которые входят в стандартную библиотеку C:
Функция |
Использование в контексте программы |
asctime* |
Конвертация времени в формат строки |
fgets |
Получение строки из потока stdin |
fseek |
Перемещение указателя в потоке stdin |
getch* |
Получение символа из потока stdin |
malloc |
Выделение памяти под указатель |
memset |
Обнуление области памяти |
mktime |
Конвертация времени в формат time_t |
printf |
Вывод форматированной строки в поток stdout |
puts |
Вывод строки с началом новой линии в поток stdout |
rand |
Получение случайного числа |
scanf* |
Получение данных из потока stdin |
srand |
Установка точки старта генерации случайного числа |
strcmp |
Сравнение двух строк |
strcpy* |
Копирование строки |
strlen |
Длина строки в символах |
time |
Получение системного времени |
Примечание к таблице. Функции, обозначенные звездочкой, являются устаревшими и могут быть небезопасными. В современных системах проектирования должны быть использованы новые функции в соответствии со стандартом ISO.
Программа разрабатывалась на основе шаблона функционального дизайна. Функциональный дизайн гарантирует, что каждый модуль компьютерной программы имеет только одну обязанность и исполняет ее с минимум побочных эффектов на другие части программы [1, статья «Связный список»].
Применительно к данной программе этот шаблон применялся на уровне проектирования архитектуры программы (т.е. разбиение программы на модули и организация взаимодействия между ними) и на уровне организации кода (т.е. разбиение кода каждого из модулей на функции).
Таким образом, программа разделена на два модуля:
1. Двусвязный список – обеспечивает работу с двусвязным списком: создание списка, добавление новых элементов, сортировка, удаление списка. Предоставляет программный интерфейс для использования этой функциональности.
2. Интерфейс взаимодействия с пользователем – обеспечивает взаимодействие программы и пользователя, выводит на экран определенные данные, обрабатывает входные данные, поступающие от пользователя. На основе этого выполняет команды по работе с двусвязным списком (посредствам предоставленного интерфейса модуля двусвязного списка).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.