- •Фгбоу впо Кубанский государственный технологический университет
- •Пояснительная записка
- •Фгбоу впо Кубанский Государственный Технологический Университет
- •Задание
- •Реферат
- •Содержание
- •Введение
- •1 Постановка задачи
- •2 Описание методов решения
- •2.1 Двусвязный циклический список
- •2.2 Основные действия, производимые над узлами двусвязного циклического списка (дцс)
- •Инициализация дцс:
- •Добавление узла в дцс:
- •Удаление узла дцс:
- •Вывод элементов дцс:
- •Вывод элементов дцс в обратном порядке:
- •Взаимообмен узлов дцс:
- •2.3 Стандартные функции для двусвязного списка
- •3 Описание реализации программы
- •4 Тестирование и результаты работы
- •Заключение
- •Список использованных источников
- •Приложение а. Исходный код программы
Заключение
В результате выполнения курсовой работы были рассмотрены двусвязные циклические списки, основные действия, производимые над узлами двусвязного циклического списка, стандартные функции для дву-связного списка, а также построена программа, использующая пинцип двусвязных циклических списков.
Программа была реализована на языке программирования Си++ в среде Microsoft Visual C++ 2008 Express Edition.
Список использованных источников
Дональд Кнут Искусство программирования. — 3-е изд. — М.: «Вильямс», 2006. — 720 с.
Ахо А., Хопкрофт Д., Ульман Д. Структуры данных и алгоритмы— 1-е изд. — М.: «Вильямс», 2000. — 560 с.
Кармен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы. Построение и анализ. — 2-е изд. — М.: «Вильямс», 2005. — 1290 с.
Кауфман В.Ш.Языки программирования. Концепции и принципы. М.: ДМК Пресс, 2010 .
Приложение а. Исходный код программы
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
struct TPoint
{
int x, y;
TPoint(): x(0), y(0) { ; }
TPoint(int theX, int theY): x(theX), y(theY) { ; }
};
struct TNode
{
TPoint point;
TNode* next;
TNode* prev;
};
//----------------------------------------------//
TNode* Push(TNode*& list, const TPoint& point)
{
TNode* node = new TNode;
node->point = point;
if (list == NULL)
{
node->next = node->prev = node;
}
else
{
node->next = list;
node->prev = list->prev;
list->prev = node;
node->prev->next = node;
}
list = node;
return list;
}
//----------------------------------------------//
TPoint Pop(TNode*& list)
{
if (list == NULL)
{
return TPoint();
}
TPoint val(list->point);
TNode* node = list;
if ((list->next == list) || (list->prev == list))
{
list = NULL;
}
else
{
list->prev->next = list->next;
list->next->prev = list->prev;
list = list->next;
}
delete node;
return val;
}
//----------------------------------------------//
std::ostream& operator << (std::ostream& os, const TPoint& point)
{
os << "[" << point.x << "," << point.y << "]";
return os;
}
//----------------------------------------------//
std::ostream& operator << (std::ostream& os, const TNode* node)
{
if (node)
{
const TNode* cursor = node;
for (; cursor->next != node; cursor = cursor->next)
{
os << cursor->point << " ";
}
os << cursor->point;
}
else
{
os << "nil";
}
return os;
}
//----------------------------------------------//
int main()
{
srand(time(NULL));
TNode* list = NULL;
for (int i = 0; i < 5; ++i)
{
TPoint point(rand()%100 - 50, rand()%100 - 50);
Push(list, point);
std::cout << "addition: " << point << std::endl;
std::cout << "list: " << list << std::endl;
}
while (list)
{
std::cout << "deleted: " << Pop(list) << std::endl;
std::cout << "list: " << list << std::endl;
}
system("pause");
return 0;
}
