- •Введение
- •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.3. Кольцевой список
Рассмотрим кольцевой список, в котором последний элемент имеет указатель на первый элемент.
Пример 6.3. Задан кольцевой список, состоящий из шести элементов (рис. 6.3.); выполнить то же задание, что и в примере 6.1.
Решение опять представим в виде таблиц (табл. 6.7а, б, в) с тремя столбцами: индекс, имя и указатель на следующий элемент.
Разница между содержимым таблицы обычного списка (пример 1, табл. 6.1) и содержимым таблицы кольцевого списка (табл. 6.7а) в том, что в табл. 6.7а нет пустой строки и в 6–й строке NEXT[6] =1, а не пусто. Содержимое табл. 6.7б и 6.7в аналогично содержимому табл. 6.2 и 6.3 для простого списка.
Таблица 6.7а Таблица 6.7б Таблица 6.7в
Индекс |
NAME |
NEXT |
|
Индекс |
NAME |
NEXT |
|
Индекс |
NAME |
NEXT |
1 |
А1 |
2 |
1 |
А1 |
2 |
1 |
А1 |
2 | ||
2 |
А2 |
3 |
2 |
А2 |
3 |
2 |
А2 |
3 | ||
3 |
А3 |
4 |
3 Pos |
А3 |
7 |
3 |
А3 |
4 | ||
4 |
А4 |
5 |
4 |
А4 |
5 |
4 Pos |
А4 |
6 | ||
5 |
А5 |
6 |
5 |
А5 |
6 |
5 Free |
|
| ||
6 |
А6 |
1 |
6 |
А6 |
1 |
6 |
А6 |
1 | ||
7 Free |
---- |
---- |
7 |
А34 |
4 |
| ||||
|
8 Free |
---- |
---- |
6.4. Стек
Рассмотрим работу со стеком. Стек представляется массивом, в таблице – это столбец NAME. Вершина стека определяется значением переменной ТОР. Ввод и вывод элемента производится на одном конце списка. При работе со стеком производятся следующие операции:
вставка - TOP:=TOP + 1; <ввод элемента>;
удаление – <удаление элемента>; ТОР := ТОР – 1;
Пример 6.4. В стек (рис. 6.4) поступило 4 элемента el1, el2, el3, el4.
Записать представление такого стека в виде массива NAME.
Вставить элемент el5.
Удалить элемент el4 (из исходного массива).
Решение
показано соответственно в табл. 6.8, 6.9,
6.10. Изменения
можно
наблюдать по указателю вершины стека
– ТОР.
Рис. 6.4
Т
Индекс NAME 1 EL1 2 EL2 3 EL3 4
EL4 5
Top EL5
Индекс NAME 1 EL1 2 EL2 3
Top EL3
-
Индекс
NAME
1
EL1
2
EL2
3
EL3
4 Top
EL4
6.5. Очередь
Рассмотрим работу с очередью. Здесь ввод производится в один конец очереди (хвост очереди), а вывод – из другого (голова очереди). В таблице для очереди используются указатели: Tail – хвост очереди, Head – голова очереди.
Пример 6.5. Очередь в текущий момент состоит из 5 элементов (рис.6.5); первые 9 элементов отсутствуют.
Р
1.
Записать
представление очереди в виде массива
NAME
.
2.Вставить
элемент el6.
3.Удалить
элемент el1
(из
исходной очереди).
Решение может быть представлено в виде трех таблиц, состоящих из двух основных столбцов: индекс и указатели Head, Tail, задающие направление очереди, а также имя элемента.
Таблица
6.12 Индекс NAME 1 … 9 --- … --- 10
Head 11 12 13 14 15
Tail EL1 EL2 EL3 EL4 EL5 EL6
Таблица
6.13
Индекс NAME 1 … 9 10 --- .
. . --- 11
Head 12 13 14
Tail
EL2 EL3 EL4 EL5
Таблица 6.11
-
Индекс
NAME
1
…
9
---
. . .
---
10 Head
11
12
13
14 Tail
EL1
EL2
EL3
EL4
EL5