Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2011_12 Комп.Науки_2сем.doc
Скачиваний:
4
Добавлен:
13.09.2019
Размер:
476.67 Кб
Скачать

21.3.3.Реализация стека на основе массива

Реализуем стек на одномерном целочисленном массиве AS длины nAS. Указатель на вершину стека Top может принимать значения в диапазоне 0..nAS. Стек пуст, когда Top=0.

const nAS=100;

var Top: 0..nAS;

AS:array[1..nAS] of integer;

procedure DoTop;

begin Top := 0

end;

function Empty:boolean;

begin Result:=(Top=0)

end;

procedure Push (i: integer);

begin

Top:=Top+1;

AS[Top]:=i;

end;

function Pop: integer;

begin

Result:=AS[Top];

Top:=Top-1;

end;

21.4.Деревья

21.4.1.Основные определения

Дерево – это совокупность элементов, называемых узлами (при этом один из них определен как корень), и отношений (родитель–сын), образующих иерархическую структуру узлов.

Рекурсивное определение дерева: Дерево – это либо пустая структура, либо узел, с которым связано конечное число деревьев, называемых поддеревьями.

Тип узла называется базовым типом дерева.

Примеры деревьев: файловая система, словарь, календарь, структура университета.

Виды узлов дерева:

  • Предок узла y – это узел, из которого исходит дуга, заходящая в узел y.

  • Потомок узла x – это узел, в который заходит дуга, исходящая из узла x.

  • Корень дерева – узел, не имеющий предков.

  • Терминальный узел (или лист) – узел, не имеющий потомков.

  • Нетерминальные (внутренние) узлы – все узлы, кроме корня и терминальных узлов.

Уровни дерева:

  • Корень дерева расположен на уровне 0.

  • Если узел X находится на уровне i, то его потомок Y – на уровне i+1.

  • Глубина (высота) дерева – максимальный уровень из уровней всех узлов.

Степени узлов дерева:

  • Степень узла – число непосредственных потомков узла.

  • Степень дерева – максимальная степень всех узлов.

Упорядоченным деревом называется дерево, у которого дуги, исходящие из каждого узла, упорядочены.

Это разные упорядоченные деревья

21.4.2.Бинарные деревья

Бинарное дерево – это упорядоченное дерево степени 2, где каждый узел связан с двумя бинарными деревьями, называемыми левым поддеревом и правым поддеревом.

Для краткости бинарные деревья будем называть просто «деревьями».

Представление бинарных деревьев

Узлы дерева будем размещать в динамической памяти. Для представления узла удобно использовать записи.

type Tinf=тип_информационой_части;

ref =^Node;

Node=record

inf:TInf; {информационная часть}

Left,Right:ref {ссылки на левое и правое поддерево}

end;

Базовый тип дерева – тип Node, являющийся записью. Тип ref – указатель на переменные типа Node.

Основные операции над деревьями

  • Создать пустое дерева.

  • Проверить, пусто ли дерево.

  • Добавить в дерево новый узел.

  • Найти заданный узел.

  • Удалить из дерева заданный узел.

  • Выполнить некоторую операцию над каждым узлом дерева. Для этого надо посетить все узлы дерева, или совершить обход дерева.

  • Уничтожить дерево и освободить динамическую память, которую занимало дерево.

Алгоритм построения произвольного дерева

  1. Построить пустое дерево Root:=nil

  2. Построить корень дерева: 2.1. Ввести данные для Inf корня 2.2. Заполнить узел new(t); t^.Inf:=данные; t^.Left:=nil; t^.Right:=nil

  3. Повторять для всех остальных узлов: 3.1. Ввести данные для Inf узла 3.2. Заполнить узел 3.3. Подсоединить узел к дереву

Построение идеально сбалансированного дерева

Идеально сбалансированным деревом называется такое дерево, у которого для каждого узла количество узлов в левом и правом поддереве различается не более чем на 1.

Высота h идеально сбалансированного дерева из n узлов не превосходит log2n: h <= log2n

n

1

2, 3

4 .. 7

8 .. 15

16 .. 31

h

0

1

2

3

4

Поиск узла в идеально сбалансированном дереве занимает время порядка O(log2n). При добавлении и удалении узлов в таком дереве необходимо сохранять баланс дерева.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]