Бинарные деревья
Rear
Rear
FIFO (FIRST INPUT — FIRST OUTPUT)
Функции, реализующие операции работы с очередью
int empty()
{
if (frnt ==rear) return 1;
else return 0; }
float remove()
{
if(empty() == 1)
{
printf("Очередь пуста."); return 0.0;
} else
{
if(frnt == (Maxq-1)) frnt=0; else frnt++; return git[frnt]; } }
void insert(float x)
{
if(rear == (Maxq-1)) rear = 0;
else rear++;
if(rear == frnt)
printf("Переполнение!");
else git[rear]=x; }
Реализация очереди на базе однонаправленного связанного списка
Однонаправленный связанный список можно рассматривать в качестве очереди поскольку (рис. 2.12): а) определены начало и конец списка, б) задан порядок расположения узлов.
info |
ptrn —■*
t
frnt
Начало очереди
info
ptrn
ptrn=NULL —■*! info ptrn
rear
Конец очереди
Рис. 2.12
1. Операция проверки пустоты очереди empty
if(frnt == NULL && rear == NULL; printf("Очередь пуста.");
2. Операция удаления элемента из очереди remove (рис. 2.13)
x=frnt->infо; p=frnt;
frnt=frnt->ptrn; free(p);
in\Wn —A info ptrn—■*■
frnt
•1Г
frnt
Начало очереди
Рис. 2.13
3. Операция помещения элемента в очередь insert (рис. 2.14)
p=(struct NODE*)malloc(sizeof(struct NODE)); p->ptrn=NULL;
p->info=x;
rear->ptrn=p;
rear=p;
info |
ptrn
Л
ptrn=NULL ---►I info ptrn i
Конец очереди
Рис. 2.14
Недостатки представления очереди и стека в виде связанного списка:
• Элемент списка занимает в оперативной памяти больше места, чем элемент массива.
• Требуется дополнительное время на обработку списка: необходимо выделять блоки оперативной памяти под узлы и изменять значения указателей.
Бинарное дерево — это конечное множество элементов, которое либо пусто, либо содержит элемент (корень), связанный с двумя различными бинарными деревьями, называемыми левым и правым поддеревьями. Каждый элемент бинарного дерева называется узлом [1,3].
Общепринятый способ изображения бинарного дерева представлен на рис. 2.15: дерево состоит из 9 узлов; А — корень; левое поддерево имеет корень В; правое — С.
Узел у, который находится непосредственно под узлом х, называется потоком х; если х находится на уровне i, то у — на уровне i+\. Наоборот, узел х называется предком у. Считается, что корень дерева расположен на уровне 1. Максимальный уровень какого-либо элемента дерева называется его глубиной или высотой. Если элемент не имеет потомков, он называется листом. Остальные элементы — внутренние узлы. Число потомков внутреннего узла называется его степенью. Максимальная степень всех узлов есть степень дерева. Число ветвей, которое нужно пройти от корня к узлу х, называется длиной пути к х. Корень имеет длину пути 1; узел на уровне / имеет длину пути /.
Рис. 2.15
Бинарное дерево — полезная структура данных в тех случаях, когда в каждой точке вычислительного процесса должно быть принято одно из двух возможных решений.
Узел дерева можно описать как структуру с полями.