31
.pdfM3 |
0 |
1 |
|
|
|
C1 |
1RC1 |
0RC2 |
|
|
|
C2 |
0SC0 |
1SC0 |
|
|
|
M4 |
0 |
1 |
|
|
|
D1 |
0RD2 |
1SD0(1) |
|
|
|
D2 |
1LD1 |
1SD0(2) |
|
|
|
• |
• |
1. M = M1oM2 |
|
(1) M3 |
|
|
|
|
(2) M4 |
|
|
|
|
|
|
• |
|
• |
|
|
|
|
|
|
|
|
(1) |
|
|
|
|
|
M2 |
|||
|
|
|
|
(1) |
||||
|
|
|
•• |
|
|
|
|
|
2. |
M = M1 oM |
|
|
|
(2) |
|||
3 |
|
|
|
•• |
||||
|
|
|
|
|
|
|
|
(1) |
|
|
|
|
|
(2) M4 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(2) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
• |
(1) |
|
|
|
(1) |
|
|
M |
4 • |
||
3. |
M = M2 |
|
|
|
|
|
|
(2) |
|
|
|
|
|
|
|||
|
|
|
(2) M3 |
()1 M1 |
||||
|
|
|
|
|
|
|||
|
|
|
|
|
(2) |
|
||
|
|
|
|
|
|
|
||
|
|
|
• |
• |
|
M1 |
||
|
|
|
M2 |
(1) |
||||
|
|
|
|
|
||||
|
|
|
(1) |
|
|
|||
|
•• |
|
|
|
|
|
|
|
4. |
M = M 3 |
|
|
|
|
|||
|
|
(2) |
(1) |
|||||
|
|
|
|
|
M4 |
|||
|
|
(2) |
|
•• |
||||
|
|
|
|
|
|
|
(2) |
|
|
|
|
|
|
(1) M1 |
|||
|
|
(1) |
|
M2 |
|
|
||
5. |
• |
|
|
|
(2) |
|||
M = M 4 |
|
|
(1) |
|
||||
|
|
(2) M3 |
|
• |
||||
|
|
|
|
|
(2) |
M 1 |
||
|
|
|
|
|
||||
Практическая работа №7.
Тема: Структуры данных.
Цель: рассмотреть основные виды структур данных: линейные списки и деревья.
Линейным списком называется конечная последовательность элементов, взятая из некоторого множества. Различают списки односвязные, двусвязные, кольцевые, кольцевые двусвязные, а также их простейший вариант - стек и очереди. В односвязном списке каждый элемент содержит только одну ссылку, связывающую его со следующим элементом в списка, т.е. у каждого элемента есть два поля: имя и указатель (рис.7.1). Мы имеем возможность заносить элемент в список и удалять элемент из списка. Для этого будем составлять процедуры вставки INS(NEL, FREE, POS) и удаления
DEL(NEL,FREE, POS), где NEL - новый элемент, FREE - индекс первой свободной ячейки, POS - позиция того элемента, после которого нужно вставить элемент.
им я указател ь
рис.7.1.
Пример 7.1. Задан список, состоящий из 6 элементов.
1.Записать его в виде двух массивов NAME и NEXT.
2.Вставить элемент A34 между А3 и А4; показать, как при этом изменяются массивы.
3.Удалить элемент А5; показать, как при этом изменяются массивы.
Решение представлено в ниже описанных таблицах, состоящих из трех основных столбцов: индекса, имени элемента - NAME и указателя на следующий элемент - NEXT. По указателю FREE можно наблюдать изменения происходящие при внесении и удалении элемента.
1. |
|
|
|
|
|
|
2. |
|
|
|
|
|
|
индек |
NA |
NEX |
|
|
|
|
индек |
|
NA |
NEX |
|
|
с |
|
ME |
T |
|
|
|
|
с |
|
ME |
T |
|
0 |
|
- |
1 |
|
|
|
|
0 |
|
- |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
A1 |
2 |
|
|
|
|
1 |
|
A1 |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
A2 |
3 |
|
|
|
|
2 |
|
A2 |
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
A3 |
4 |
|
|
|
|
3 |
|
A3 |
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
A4 |
5 |
|
|
|
|
4 |
|
A4 |
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
A5 |
6 |
|
|
|
|
5 |
|
A5 |
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
A6 |
0 |
|
|
|
|
6 |
|
A6 |
0 |
FRE |
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
|
|
|
|
|
|
7 |
|
A34 |
4 |
|
E |
|
|
|
|
|
|
FREE |
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
||
3. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
индекс |
NAME |
NEXT |
|
|
||||||
|
|
0 |
|
- |
|
1 |
|
|
|
|
|
|
|
|
1 |
|
A1 |
2 |
|
|
|
|
|
|
|
|
|
2 |
|
A2 |
3 |
|
|
|
|
|
|
|
|
|
3 |
|
A3 |
4 |
|
|
|
|
|
|
|
|
|
4 |
|
A4 |
6 |
|
|
|
|
|
|
|
|
|
5 |
|
A5 |
6 |
|
|
← заносится в |
||||
|
|
6 |
|
A6 |
0 |
|
|
список |
|
|
||
FREE |
7 |
|
|
|
|
|
|
ячеек |
|
|
||
В двусвязном списке присутствует система двойных указателей. В таблице добавляется столбец PREV, указывающий на связи с предыдущим элементом.
Пример 7.2. Задан двусвязный список, состоящий из 6 элементов.
Задание 1, 2, и 3 аналогичны примеру 1, только используется третий массив PREV ( вставка элемента 34, удаление 5 ).
Решение представлено в описанных ниже таблицах, в которых, в отличие от предыдущих, добавлен еще один столбец - PREVуказатель на предыдущий элемент.
1.
|
индекс |
|
NAME |
NEXT |
PREV |
||
|
|
|
|
|
|
|
- |
|
0 |
- |
1 |
|
|||
|
1 |
1 |
2 |
|
0 |
||
|
2 |
2 |
3 |
|
1 |
||
|
3 |
3 |
4 |
|
2 |
||
|
4 |
4 |
5 |
|
3 |
||
|
5 |
5 |
6 |
|
4 |
||
|
|
|
|
|
|
|
5 |
|
6 |
6 |
0 |
|
|||
2. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
индекс |
|
NAME |
NEXT |
|
PREV |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
0 |
|
- |
1 |
|
- |
|
|
|
|
|
|
|
|
|
|
1 |
|
1 |
2 |
|
0 |
|
|
|
|
|
|
|
|
|
|
2 |
|
2 |
3 |
|
1 |
|
|
|
|
|
|
|
|
|
|
3 |
|
3 |
7 |
|
2 |
|
|
4 |
|
4 |
5 |
|
7 |
|
|
5 |
|
5 |
6 |
|
4 |
|
|
6 |
|
6 |
0 |
|
5 |
|
|
|
|
|
|
|
|
|
|
7 |
|
34 |
4 |
|
3 |
|
|
|
|
|
|
|
|
3. |
|
|
|
|
|
|
инде |
NA |
NE |
PRE |
|
|
|
|
|
|
|
|
0 |
- |
1 |
- |
|
|
|
|
|
|
|
|
1 |
1 |
2 |
0 |
|
|
|
|
|
|
|
|
2 |
2 |
3 |
1 |
|
|
|
|
|
|
|
|
3 |
3 |
4 |
2 |
|
|
|
|
|
|
|
|
4 |
4 |
5 |
3 |
|
|
|
|
|
|
- заносится в список |
|
5 |
5 |
6 |
4 |
|
|
|
|
|
|
|
|
6 |
6 |
0 |
5 |
|
|
|
|
|
|
|
Рассмотрим кольцевой список, в котором указатель последнего элемента указывает на первый элемент.
Пример 7.3. Задан кольцевой список, состоящий из 6 элементов.
A1 |
A2 |
. . . |
A6 |
|
Задание 1, 2, и 3 аналогичны примеру 1.
Решение опять представим в виде таблиц с тремя столбцами: индекс, имя элемента и указатель на следующий элемент.
1.
индекс |
NAM |
NEX |
1 |
A1 |
2 |
2 |
A2 |
3 |
3 |
A3 |
4 |
4 |
A4 |
5 |
5 |
A5 |
6 |
6 |
A6 |
1 |
7 |
|
|
Разница между содержимым таблицы обычного списка (пример 1.) и содержимым таблицы кольцевого списка в том, что нет -й строки, а в 6-й
строке NEXT [ 6 ] = 1, а не .
Содержимое таблиц 2.) и 3.) аналогично содержимому таблиц 2.) и 3.) для простого списка.
Контрольные задания.
1. Задан односвязный список состоящий из семи элементов.
а) Организовать ввод элемента El34 и удаление элемента El7. Решение организовать в таблице и процедуре.
б) Организовать ввод элемента El56 и удаление элемента El5. Решение организовать в таблице и процедуре.
в) Организовать ввод элемента El23 и удаление элемента El6. Решение организовать в таблице и процедуре.
г) Организовать ввод элемента El12 и удаление элемента El4. Решение организовать в таблице и процедуре.
д) Организовать ввод элемента El67 и удаление элемента El2. Решение организовать в таблице и процедуре.
е) Организовать ввод элемента El56 и удаление элемента El3. Решение организовать в таблице и процедуре.
2.Задан двусвязный список , состоящий из 7-ми элементов. Выполнить задания аналогичные заданию 1.
3.Задан кольцевой список состоящий из 5-ти элементов. Выполнить задания аналогичные заданию 1.
Практическая работа №8.
Тема: Структуры данных (продолжение).
Цель: рассмотреть основные виды структур данных: линейные списки и деревья.
Рассмотрим работу со стеком. Стек представляется массивом, в таблице - это столбец NAME. Вершина стека определяется значением переменной TOP. Ввод и вывод элемента производится из одного конца списка. При введении нового элемента производится операции а) TOP←TOP+1 , b)ввод ; при
удалении - а) удаление , b) TOP←TOP - 1.
Пример 8.1. В стек (рис. 8.1.) поступило 4 элемента el1, el2, el3, el4 (рис. 8.1.).
1.Записать представление такого стека в виде массива NAME.
2.Вставить элемент el5.
3.Удалить элемент el4.
el4
el3
el2
el1
рис. 8.1.
Решение показано соответственно в таблицах 1), 2), 3). Изменения можно наблюдать по указателю вершины стека - TOP.
1.) индек NAM
1el1
2el2
3el3
TOP 4 |
el4 |
2.) индек NAM
1el1
2el2
3el3
4el4
TOP 5 |
el5 |
3.) индек NAM
1el1
2el2
TOP 3 |
el3 |
Рассмотрим работу с очередью. Здесь ввод производится в один конец очереди (начало очереди) , а вывод - из другого (конец очереди).
В таблице для очереди производятся добавления: BACK - конец очереди, FORWARD - начало очереди.
Пример 8.2. Очередь (рис.8.2) состоит из 5 элементов.
1.Записать представление очереди в виде массива NAME.
2.Вставить элемент el6.
3.Удалить элемент el1.
el5
el4
el3
el2
el1
рис. 8.2.
-64-
Решение может быть представлено в виде трех таблиц, состоящих из трех основных столбцов : направление очереди, индекс и имя элемента, над которым производятся операции.
1.) |
|
индекс |
NAM |
|
|
|
|
1 |
|
|
|
|
|
... |
|
|
|
|
|
9 |
|
|
|
|
|
|
|
|
|
BACK |
10 |
|
EL1 |
|
|
|
|
11 |
|
EL2 |
|
|
|
12 |
|
EL3 |
|
|
|
13 |
|
EL4 |
|
FORWA |
14 |
|
EL5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.) |
|
индекс |
|
NAME |
|
|
|
1 |
|
|
|
|
|
... |
|
|
|
|
|
9 |
|
|
|
|
|
|
|
|
|
BACK |
|
10 |
|
EL1 |
|
|
|
11 |
|
EL2 |
|
|
|
12 |
|
EL3 |
|
|
|
13 |
|
EL4 |
|
|
|
14 |
|
EL5 |
|
FORWAR |
15 |
|
EL6 |
|
|
|
|
|
|
|
|
3.) |
индекс |
NAM |
|
1 |
|
|
... |
|
|
9 |
|
BACK |
10 |
EL1 |
|
11 |
EL2 |
|
12 |
EL3 |
|
13 |
EL4 |
|
14 |
EL5 |
FORWAR |
15 |
EL6 |
Контрольные задания.
1.Задан стек :
а) Всего - семь элементов. Произвести ввод восьмого элемента, удаление пятого элемента. Указанные операции производить, используя таблицы и составляя процедуры.
б) Всего - пять элементов. Произвести ввод шестого элемента, удаление четвертого элемента. Указанные операции производить, используя таблицы и составляя процедуры.
в) Всего - три элемента. Произвести ввод четвертого элемента, удаление второго элемента. Указанные операции производить, используя таблицы и составляя процедуры.
г) Всего - восемь элементов. Произвести ввод девятого элемента, удаление первого элемента. Указанные операции производить, используя таблицы и составляя процедуры.
д) Всего - семь элементов. Произвести удаление третьего элемента, ввод восьмого элемента. Указанные операции производить, используя таблицы и составляя процедуры.
е) Всего - пять элементов. Произвести удаление первого элемента, ввод пятого элемента. Указанные операции производить, используя таблицы и составляя процедуры.
2.Задана очередь :
а) Всего - семь элементов. Произвести ввод восьмого элемента, удаление первого элемента. Указанные операции производить, используя таблицы и составляя процедуры.
б) Всего - шесть элементов. Произвести ввод седьмого элемента, удаление первого элемента. Указанные операции производить, используя таблицы и составляя процедуры.
в) Всего - пять элементов. Произвести ввод шестого элемента, удаление первого элемента. Указанные операции производить, используя таблицы и составляя процедуры.
г) Всего - четыре элемента. Произвести ввод пятого элемента, удаление первого элемента. Указанные операции производить, используя таблицы и составляя процедуры.
Практическая работа №9.
Тема: Теория Графов и алгоритмы на графах.
Цель: Изучить способы представления графов, их разновидности и алгоритмы нахождения пути по графу.
Определение 9.1. Графом (G,X) называется совокупность двух конечных множеств: множества точек, которые называются вершинами ( X = {X1 ,..., X n }) и множества пар вершин, которые называются дугами или
ребрами ( (Xi , X j ) G ) .
Определение 9.2. Если на каждом ребре задается направление, то граф (G,X) называется Ориентированным. В противном случае граф называется неориентированным.
Определение 9.3. Ребром называются две встречные дуги (Xi , X j ) и (X j , Xi ). На графе они изображаются одной линией без стрелки.
Определение 9.4. Ребро или дуга , концевые вершины которых совпадают, называются петлей.
Определение 9.5. Вершина и ребро или вершина и дуга называются инцидентными друг другу, если вершина является для этого ребра или для этой дуги концевой точкой.
Определение 9.6. Две вершины, являющиеся концевыми для некоторого ребра или некоторой души, называются смежными.
Определение 9.7. Взвешенным называется граф, если задана функция lij на дугах графа , например lij - длина дуги (xi,x j ). Чаще всего lij ≥ 0 ;
|
|
можно задать lij в матричном виде: lij = |
lij,(xi,x j ) G |
∞,(xi,x j ) G |
|
|
|
Пример 9.1.: На рисунке 9.1 изображен граф, имеющий четыре
вершины X = {X1, X2, X3, X4} , четыре дуги (X1, X3), (X2, X1), (X2, X4 ), (X3, X2 ) и два ребра (X1, X4 ), (X4, X5). Для вершины X1 : смежными являются вершины:
{X1 , X2 }, {X1 ,X3 }, {X1 ,X4 }, инцидентными - дуги (X1, X3), (X2, X1) и ребро (X1, X4 ). В этом же примере приведена таблица G - таблица изображения
графа, где строки и столбцы - это вершины , “1” - это присутствие соответствующей дуги (направление принимается от буквы, именующей строку к букве, именующей столбец) , “0”- отсутствие соединения вершин. Присутствие “1” на главной диагонали данной таблицы означает присутствие петель на графе. Такая таблица называется матрицей смежности представления графа.
X1 |
X2 |
X1 |
X2 |
|
|
|
X3 |
X4 |
X3 |
X4 |
|
||
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G |
X1 |
X2 |
X3 |
X4 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
X1 |
0 |
0 |
1 |
1 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
X2 |
1 |
0 |
0 |
1 |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
X3 |
0 |
1 |
0 |
1 |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
X4 |
1 |
0 |
1 |
0 |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
рис.9.1. |
|
|
|
|
|
Для ориентированного графа определяются следующие понятия: |
||||||||||||||||||||
1. Исход вершины G(Xi ) - множество вершин X j , таких что (Xi , X j ) G . |
||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-69- |
|
|
|
и X4 . |
|
В примере 9.1 рассмотрим исходы для вершин X1 |
||||||||||||||||||||
( |
X |
1 ){ |
3 |
, X |
4 } ( |
X |
1 |
, X |
3 ) ( |
|
1 |
, X |
4 ) |
G |
|
|
|
|
|
|
G |
: |
X |
; |
|
, |
X |
|
|
|
|
|
|
||||||||
для G |
X |
: |
X |
, X |
; |
X |
4 |
, X |
. |
X |
4 |
, X |
3 ) |
G |
|
|
|
|
|
|
( |
|
4 ){ |
1 |
|
3} ( |
|
|
1 )( |
|
|
|
|
|
|
|
|
|
|||
2. Вход вершины G −1(Xi ) - множество вершин X j , таких что (X j , Xi ) G . |
||||||||||||||||||||
В примере 3.1 рассмотрим исходы для вершин X1 |
и X4 . |
|||||||||||||||||||
G−1(X1)={X2, X4};(X2 , X1),(X4, X1) G |
|
|
|
|
||||||||||||||||
для G−1(X4 )={X1, X2 , X3};(X1, X4 )(X2, X4 )(X3, X4) G |
|
|||||||||||||||||||
3. Степень исхода - мощность |
|
|
|
|
|
множества исхода. |
||||||||||||||
S(X1 )= 2
S(X4 )= 2
4. Степень входа - мощность S −1(Xi )= G−1(Xi ) множества входа.
S−1(X1)=2
S−1(X4 )=3
Для неориентированного графа степень S(Xi )= G(Xi ) вершины Xi
равна числу рёбер, инцидентных ей вершин.
Кроме матрицы смежности, описанной в примере 9.1, граф может быть представлен матрицей инцидентности.
Определение 9.7. Матрицей инцидентности называется прямоугольная матрица с числом строк, равным числу вершин графа, и с числом столбцов, равным количеству ребер (дуг) графа. Элементы матрицы aij задаются следующим образом: “1” ставится, в случае если
вершина vi инцидентна ребру uj , “0” - в противном случае, как показано в примере 9.2.
