- •Введение
- •1. Алгоритмы сортировки
- •1.1. Общие положения
- •1.2. Сортировка простыми включениями
- •Словесное описание алгоритма
- •1.3. Сортировка простым выбором
- •1.4. Сортировка простым обменом
- •1.5. Задания для самостоятельной работы
- •2. Алгоритмы покрытия
- •2.1. Постановка задачи покрытия
- •2. 2. Алгоритм полного перебора
- •2. 3. Алгоритм граничного перебора по вогнутому множеству
- •2.4. Алгоритмы, использующие сокращение таблицы покрытий
- •1. Для случая построения одного кратчайшего покрытия
- •2. В случае построения минимального покрытия
- •3. При условии построения всех безызбыточных покрытий
- •2.5. Алгоритм приближенного решения задачи о покрытии
- •2.6. Задачи для самостоятельной работы
- •3. Алгоритмы на графах
- •3.1. Общие положения
- •3.2. Алгоритмы нахождения оптимального пути
- •Волновой алгоритм построения кратчайшего пути для взвешенного графа
- •Волновой алгоритм построения длиннейшего пути во взвешенном графе
- •3.3. Нахождение компонент связности
- •Алгоритм построения компонент связности в неориентированном графе
- •Пример 3.5
- •3.4. Алгоритмы нахождения подграфов
- •3.5. Дерево. Остов
- •Пример 3.7.
- •Алгоритм построения произвольного остова
- •Алгоритм построения минимального остова
- •Алгоритм построения системы независимых циклов графа
- •Пример 3.12.
- •3.6. Алгоритм кратчайшей раскраски графа
- •3.7. Задачи для самостоятельной работы
- •4. Конечные автоматы
- •4.1. Общие положения
- •4.2. Представление автомата
- •4.3. Взаимные преобразования автоматов
- •4.4. Определение реакции автомата на входное слово
- •4.5. Задания для самостоятельной работы
- •5. Машины тьюринга
- •5.1. Общие положения
- •5.2. Операции над машинами Тьюринга
- •6. Структуры данных
- •6.1. Списки
- •6.2. Двусвязный список
- •6.3. Кольцевой список
- •6.4. Стек
- •6.5. Очередь
- •6.6. Задания для самостоятельной работы
- •Литература
6. Структуры данных
Цель практического занятия по данной теме – рассмотреть основные виды структур данных: линейные списки и их разновидности, а также операции над ними.
6.1. Списки
Линейным списком (просто списком) называется конечная последовательность элементов, взятая из некоторого множества. Различают списки односвязные, двусвязные, кольцевые, кольцевые двусвязные, а также их специфические варианты – стек и очередь [6].
В односвязном списке каждый элемент, кроме последнего, содержит ссылку на следующий элемент в списке, т.е. у каждого элемента есть два поля: имя и указатель (рис. 6.1а). Структура списка (рис. 6.1б) содержит указатель на первый элемент (First), который является внешним.
Эта структура данных позволяет заносить элемент в список и удалять элемент из списка без перемещения остальных элементов, т.е. без переобозначения их индексов. Заметим, что элементом списка может быть достаточно сложная структура данных, в том числе и список.
Рассмотрим процедуры вставки элементаINS(NEL, FREE, POS) и удаления элемента DEL(POS) при работе с различными списками. Здесь NEL – новый элемент, FREE – индекс первой свободной ячейки, POS – позиция того элемента, после которого нужно вставить (удалить) элемент.
Пример 6.1. Задан список, состоящий из 6 элементов. Требуется выполнить следующее задание.
1. Записать список в виде двух массивов NAME и NEXT.
2. Вставить элемент А34 между А3 и А4; показать, как при этом изменяются массивы.
3. Удалить из исходного списка А5; показать, как при этом изменяются массивы.
Решение представлено в табл. 6.1 – 6.3, состоящих из трех основных столбцов: индекса, имени элемента – NAME и указателя на следующий элемент – NEXT.
Т
По
указателю Free
и по
отмеченным жирным шрифтом элементам
массивов
NAME и NEXT можно
наблюдать изменения, происходящие при
внесении и удалении элемента.
Отметим,
что удаление элемента
из
списка не означает его физического
уничтожения (показано в табл. 6.3
зачернением).
Индекс |
NAME |
NEXT |
0 |
---- |
1 |
1 |
А1 |
2 |
2 |
А2 |
3 |
3 |
А3 |
4 |
4 |
А4 |
5 |
5 |
А5 |
6 |
6 |
А6 |
0 |
7 Free |
---- |
---- |
Таблица 6.2 Таблица 6.3
Индекс |
NAME |
NEXT |
|
Индекс |
NAME |
NEXT |
0 |
--- |
1 |
0 |
--- |
1 | |
1 |
A1 |
2 |
1 |
A1 |
2 | |
2 |
A2 |
3 |
2 |
A2 |
3 | |
3 Pos |
A3 |
7 |
3 |
A3 |
4 | |
4 |
A4 |
5 |
4 Pos |
A4 |
6 | |
5 |
A5 |
6 |
5 Free |
|
| |
6 |
A6 |
0 |
6 |
А6 |
0 | |
7 |
A34 |
4 |
| |||
8 Free |
--- |
--- |
6.2. Двусвязный список
В двусвязном списке присутствует система двойных указателей, поэтому в таблице добавляется столбец PREV (previous - предыдущий), указывающий на связи с предыдущим элементом.
Пример 6.2. Для двусвязного списка, состоящего из 6 элементов (рис. 5.2.), выполнить то же задание, что и в примере 6.1.
Решение представлено в табл. 6.4-6.6.
Таблица 6.4 Таблица 6.5
Индекс |
NAME |
NEXT |
PREV |
|
Индекс |
NAME |
NEXT |
PREV |
0 |
---- |
1 |
---- |
0 |
---- |
1 |
---- | |
1 |
A1 |
2 |
0 |
1 |
A1 |
2 |
0 | |
2 |
A2 |
3 |
1 |
2 |
A2 |
3 |
1 | |
3 |
A3 |
4 |
2 |
3 Pos |
A3 |
7 |
2 | |
4 |
A4 |
5 |
3 |
4 |
A4 |
5 |
3 | |
5 |
А5 |
6 |
4 |
5 |
A5 |
6 |
4 | |
6 |
A6 |
0 |
5 |
6 |
A6 |
0 |
5 | |
7 Free |
--- |
--- |
--- |
7 |
A34 |
4 |
3 | |
|
8 Free |
--- |
--- |
--- |
Таблица 6.6
Индекс |
NAME |
NEXT |
PREV |
0 |
---- |
1 |
---- |
1 |
A1 |
2 |
0 |
2 |
A2 |
3 |
1 |
3 |
A3 |
4 |
2 |
4 Pos |
A4 |
6 |
3 |
5 Free |
|
|
|
6 |
A6 |
0 |
4 |