Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практические задания и программы / Методичка с материалом и заданиями (все вместе).doc
Скачиваний:
82
Добавлен:
11.02.2016
Размер:
2.19 Mб
Скачать

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 зачернением).

аблица 6.1

Индекс

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