SlideShare a Scribd company logo
1 of 12
Download to read offline
Модуль 2: Составные типы данных и работа с динамической
памятью.
Темы лекции: Динамические структуры данных.
Практическое задание: Динамические структуры данных.
Тренер: Игорь Шкулипа, к.т.н.
C++ Базовый. Занятие 7
http://www.slideshare.net/IgorShkulipa 2
Динамические структуры данных
К динамическим структурам данных относятся:
⚫ однонаправленные (односвязные) списки;
⚫ двунаправленные (двусвязные) списки;
⚫ циклические списки;
⚫ стек;
⚫ очередь;
⚫ бинарные деревья (и не только бинарные);
⚫ представления графов.
http://www.slideshare.net/IgorShkulipa 3
Список
Список – это совокупность элементов, образующих последовательную
структуру. Разделяют следующие виды списков:
⚫ односвязные списки
⚫ двусвязные списки
⚫ циклические списки
Односвязный список:
Связь элементов в этом списке однонаправленная. Каждый предыдущий
элемент указывает на следующий. Последний элемент указывает на
null
Информация
первый элемент
Указатель на
следующий
Информация
Указатель на
следующий
Информация
Указатель на
следующий
второй элемент последний элемент
...
http://www.slideshare.net/IgorShkulipa 4
Структура для односвязного списка
struct ListElement
{
int iInformation;
ListElement* Next;
}
...
//Создание следующего элемента списка
ListElement *elem1=new ListElement;
elem1->iInformation=1;
elem1->Next=null;
ListElement *elem2=new ListElement;
elem2->iInformation=2;
elem2->Next=null;
elem1->Next=elem2;
1
elem1
Next
2
elem2
Next
null
http://www.slideshare.net/IgorShkulipa 5
Двусвязный список
Двусвязный список:
Связь элементов в этом списке двунаправленная. Каждый предыдущий
элемент указывает на следующий, каждый следующий - на
предыдущий. Следующий элемент для последнего - это null,
предыдущий элемент для первого – это null.
Информация
первый элемент
Указатель на
следующий
Информация
Указатель на
следующий
Информация
Указатель на
следующий
второй элемент последний элемент
...
Указатель на
предыдущий
Указатель на
предыдущий
Указатель на
предыдущий
http://www.slideshare.net/IgorShkulipa 6
Структура для двусвязного списка
struct ListElement
{
int iInformation;
ListElement* Next;
ListElement* Prev;
}
...
//Создание следующего элемента списка
ListElement *elem1=new ListElement;
elem1->iInformation=1;
elem1->Next=null;
elem1->Prev=null;
ListElement *elem2=new ListElement;
elem2->iInformation=2;
elem2->Next=null;
elem2->Prev=elem1;
elem1->Next=elem2;
1
elem1
Next
2
elem2
Next
null
Prev
Prev
null
http://www.slideshare.net/IgorShkulipa 7
Циклические списки
Информация
первый элемент
Указатель на
следующий
Информация
Указатель на
следующий
Информация
Указатель на
следующий
второй элемент последний элемент
...
Указатель на
предыдущий
Указатель на
предыдущий
Указатель на
предыдущий
Информация
первый элемент
Указатель на
следующий
Информация
Указатель на
следующий
Информация
Указатель на
следующий
второй элемент последний элемент
...
Циклические списки отличаются от обычных тем, что крайние элементы
указывают не на null, а с начала на конец и с конца на начало.
Односвязный циклический список:
Двусвязный циклический список:
http://www.slideshare.net/IgorShkulipa 8
Стек
Стек — динамическая структура
данных, представляющая из
себя упорядоченный набор
элементов, в которой
добавление новых элементов и
удаление существующих
производится с одного конца,
называемого вершиной стека.
Принцип организации данных в
стеке – это, так называемый
LIFO (Last-in-First-out).
Для стека определяются всего две
операции:
⚫ push – добавить данные в
стек
⚫ pop – извлечь данные из
стека
8
16
1
10
12
push
8
16
1
10
12
pop
12
12
http://www.slideshare.net/IgorShkulipa 9
Очередь
Очередь — это структура, в
которой для добавления
элементов доступен только один
конец, называемый хвостом, а
для удаления — другой,
называемый головой.
Принцип организации данных в
стеке – это, так называемый
FIFO (First-in-First-out).
Для очереди определяются две
операции:
⚫ добавить данные в очередь
⚫ извлечь данные из очереди
8
16
1
10
12
добавить
12
10
извлечь
http://www.slideshare.net/IgorShkulipa 10
Дерево
Дерево — это совокупность
элементов, называемых узлами,
один из которых определен как
корень, и отношений,
образующих иерархическую
структуру узлов. Узлы, которые
не имеют ни одного
последующего узла, называются
листьями.
В двоичном (бинарном) дереве
каждый узел может быть связан
не более чем двумя другими
узлами.
Рекурсивно двоичное дерево
определяется так: двоичное
дерево бывает либо пустым,
либо содержит корневой узел, а
также два независимых
поддерева — левое поддерево
и правое поддерево.
8
16 1
10
12
12
10
http://www.slideshare.net/IgorShkulipa 11
Граф
Графы можно представить несколькими способами:
1. В виде матрицы смежностей (двумерный массив).
1. В виде структуры, состоящей из массива вершин и массива ребер. Где
ребра представляются в виде структуры, содержащей номер вершины
«из которой» ребро и номер вершины «в которую» ребро.
1. В виде динамической структуры данных, в которой содержится номер
вершины и два массива указателей на следующие вершины.
struct GraphNode
{
int iNumber;
GraphNode* NextNodes[];
GraphNode* PrevNodes[];
}
http://www.slideshare.net/IgorShkulipa 12
Лабораторная работа №7
1. Создать динамический односвязный список.
⚫ Отсортировать список в порядке возрастания/убывания
⚫ Вставить в список введенный с клавиатуры элемент, не нарушая порядка
сортировки.
2. Создать динамический двусвязный список.
⚫ Отсортировать список в порядке возрастания/убывания.
⚫ Вставить в список введенный с клавиатуры элемент, не нарушая порядка
сортировки.
3. Создать динамический двусвязный циклический список.
⚫ Найти максимальный элемент списка.
⚫ Найти минимальный элемент списка
4. Создать стек.
5. Создать очередь.
6. Создать бинарное дерево.

More Related Content

Viewers also liked

JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.Igor Shkulipa
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled PresentationKamilla Paiva
 
Organists Review.compressed
Organists Review.compressedOrganists Review.compressed
Organists Review.compressedJamie Singleton
 
C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.Igor Shkulipa
 
Production diary 4
Production diary 4Production diary 4
Production diary 4Laila Jaleel
 
Vijay Bhosekar_ Research Article_ Frontiers in Plant Science
Vijay Bhosekar_ Research Article_ Frontiers in Plant ScienceVijay Bhosekar_ Research Article_ Frontiers in Plant Science
Vijay Bhosekar_ Research Article_ Frontiers in Plant Sciencevijay bhosekar
 
Production diary 8
Production diary 8Production diary 8
Production diary 8Laila Jaleel
 
Production diary 8
Production diary 8Production diary 8
Production diary 8Laila Jaleel
 
Vijay bhosekar published article organic agriculture
Vijay bhosekar  published article  organic agricultureVijay bhosekar  published article  organic agriculture
Vijay bhosekar published article organic agriculturevijay bhosekar
 

Viewers also liked (13)

JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled Presentation
 
Organists Review.compressed
Organists Review.compressedOrganists Review.compressed
Organists Review.compressed
 
10 Reasons to Trademark Your Business
10 Reasons to Trademark Your Business10 Reasons to Trademark Your Business
10 Reasons to Trademark Your Business
 
C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.
 
Production diary 4
Production diary 4Production diary 4
Production diary 4
 
Vijay Bhosekar_ Research Article_ Frontiers in Plant Science
Vijay Bhosekar_ Research Article_ Frontiers in Plant ScienceVijay Bhosekar_ Research Article_ Frontiers in Plant Science
Vijay Bhosekar_ Research Article_ Frontiers in Plant Science
 
Production diary 8
Production diary 8Production diary 8
Production diary 8
 
Production diary 8
Production diary 8Production diary 8
Production diary 8
 
Challenge 11
Challenge 11Challenge 11
Challenge 11
 
What is Lean UX?
What is Lean UX?What is Lean UX?
What is Lean UX?
 
5 historia clinica
5  historia clinica 5  historia clinica
5 historia clinica
 
Vijay bhosekar published article organic agriculture
Vijay bhosekar  published article  organic agricultureVijay bhosekar  published article  organic agriculture
Vijay bhosekar published article organic agriculture
 

Similar to C++ Базовый. Занятие 07.

Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1simple_people
 
тема 4
тема 4тема 4
тема 4asheg
 
Абстрактные типы данных, последовательности, списки
Абстрактные типы данных, последовательности, спискиАбстрактные типы данных, последовательности, списки
Абстрактные типы данных, последовательности, спискиOlga Maksimenkova
 
Управление Данными. Лекция 6
Управление Данными. Лекция 6Управление Данными. Лекция 6
Управление Данными. Лекция 6Dmitriy Krukov
 

Similar to C++ Базовый. Занятие 07. (6)

Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1
 
тема 4
тема 4тема 4
тема 4
 
Абстрактные типы данных, последовательности, списки
Абстрактные типы данных, последовательности, спискиАбстрактные типы данных, последовательности, списки
Абстрактные типы данных, последовательности, списки
 
структуры данных
структуры данныхструктуры данных
структуры данных
 
лекция 4
лекция 4лекция 4
лекция 4
 
Управление Данными. Лекция 6
Управление Данными. Лекция 6Управление Данными. Лекция 6
Управление Данными. Лекция 6
 

More from Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03. Igor Shkulipa
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 

More from Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 

C++ Базовый. Занятие 07.

  • 1. Модуль 2: Составные типы данных и работа с динамической памятью. Темы лекции: Динамические структуры данных. Практическое задание: Динамические структуры данных. Тренер: Игорь Шкулипа, к.т.н. C++ Базовый. Занятие 7
  • 2. http://www.slideshare.net/IgorShkulipa 2 Динамические структуры данных К динамическим структурам данных относятся: ⚫ однонаправленные (односвязные) списки; ⚫ двунаправленные (двусвязные) списки; ⚫ циклические списки; ⚫ стек; ⚫ очередь; ⚫ бинарные деревья (и не только бинарные); ⚫ представления графов.
  • 3. http://www.slideshare.net/IgorShkulipa 3 Список Список – это совокупность элементов, образующих последовательную структуру. Разделяют следующие виды списков: ⚫ односвязные списки ⚫ двусвязные списки ⚫ циклические списки Односвязный список: Связь элементов в этом списке однонаправленная. Каждый предыдущий элемент указывает на следующий. Последний элемент указывает на null Информация первый элемент Указатель на следующий Информация Указатель на следующий Информация Указатель на следующий второй элемент последний элемент ...
  • 4. http://www.slideshare.net/IgorShkulipa 4 Структура для односвязного списка struct ListElement { int iInformation; ListElement* Next; } ... //Создание следующего элемента списка ListElement *elem1=new ListElement; elem1->iInformation=1; elem1->Next=null; ListElement *elem2=new ListElement; elem2->iInformation=2; elem2->Next=null; elem1->Next=elem2; 1 elem1 Next 2 elem2 Next null
  • 5. http://www.slideshare.net/IgorShkulipa 5 Двусвязный список Двусвязный список: Связь элементов в этом списке двунаправленная. Каждый предыдущий элемент указывает на следующий, каждый следующий - на предыдущий. Следующий элемент для последнего - это null, предыдущий элемент для первого – это null. Информация первый элемент Указатель на следующий Информация Указатель на следующий Информация Указатель на следующий второй элемент последний элемент ... Указатель на предыдущий Указатель на предыдущий Указатель на предыдущий
  • 6. http://www.slideshare.net/IgorShkulipa 6 Структура для двусвязного списка struct ListElement { int iInformation; ListElement* Next; ListElement* Prev; } ... //Создание следующего элемента списка ListElement *elem1=new ListElement; elem1->iInformation=1; elem1->Next=null; elem1->Prev=null; ListElement *elem2=new ListElement; elem2->iInformation=2; elem2->Next=null; elem2->Prev=elem1; elem1->Next=elem2; 1 elem1 Next 2 elem2 Next null Prev Prev null
  • 7. http://www.slideshare.net/IgorShkulipa 7 Циклические списки Информация первый элемент Указатель на следующий Информация Указатель на следующий Информация Указатель на следующий второй элемент последний элемент ... Указатель на предыдущий Указатель на предыдущий Указатель на предыдущий Информация первый элемент Указатель на следующий Информация Указатель на следующий Информация Указатель на следующий второй элемент последний элемент ... Циклические списки отличаются от обычных тем, что крайние элементы указывают не на null, а с начала на конец и с конца на начало. Односвязный циклический список: Двусвязный циклический список:
  • 8. http://www.slideshare.net/IgorShkulipa 8 Стек Стек — динамическая структура данных, представляющая из себя упорядоченный набор элементов, в которой добавление новых элементов и удаление существующих производится с одного конца, называемого вершиной стека. Принцип организации данных в стеке – это, так называемый LIFO (Last-in-First-out). Для стека определяются всего две операции: ⚫ push – добавить данные в стек ⚫ pop – извлечь данные из стека 8 16 1 10 12 push 8 16 1 10 12 pop 12 12
  • 9. http://www.slideshare.net/IgorShkulipa 9 Очередь Очередь — это структура, в которой для добавления элементов доступен только один конец, называемый хвостом, а для удаления — другой, называемый головой. Принцип организации данных в стеке – это, так называемый FIFO (First-in-First-out). Для очереди определяются две операции: ⚫ добавить данные в очередь ⚫ извлечь данные из очереди 8 16 1 10 12 добавить 12 10 извлечь
  • 10. http://www.slideshare.net/IgorShkulipa 10 Дерево Дерево — это совокупность элементов, называемых узлами, один из которых определен как корень, и отношений, образующих иерархическую структуру узлов. Узлы, которые не имеют ни одного последующего узла, называются листьями. В двоичном (бинарном) дереве каждый узел может быть связан не более чем двумя другими узлами. Рекурсивно двоичное дерево определяется так: двоичное дерево бывает либо пустым, либо содержит корневой узел, а также два независимых поддерева — левое поддерево и правое поддерево. 8 16 1 10 12 12 10
  • 11. http://www.slideshare.net/IgorShkulipa 11 Граф Графы можно представить несколькими способами: 1. В виде матрицы смежностей (двумерный массив). 1. В виде структуры, состоящей из массива вершин и массива ребер. Где ребра представляются в виде структуры, содержащей номер вершины «из которой» ребро и номер вершины «в которую» ребро. 1. В виде динамической структуры данных, в которой содержится номер вершины и два массива указателей на следующие вершины. struct GraphNode { int iNumber; GraphNode* NextNodes[]; GraphNode* PrevNodes[]; }
  • 12. http://www.slideshare.net/IgorShkulipa 12 Лабораторная работа №7 1. Создать динамический односвязный список. ⚫ Отсортировать список в порядке возрастания/убывания ⚫ Вставить в список введенный с клавиатуры элемент, не нарушая порядка сортировки. 2. Создать динамический двусвязный список. ⚫ Отсортировать список в порядке возрастания/убывания. ⚫ Вставить в список введенный с клавиатуры элемент, не нарушая порядка сортировки. 3. Создать динамический двусвязный циклический список. ⚫ Найти максимальный элемент списка. ⚫ Найти минимальный элемент списка 4. Создать стек. 5. Создать очередь. 6. Создать бинарное дерево.