lign="justify">//структура нодаNODE
{Number [5];// Номер готельного номераCountBads;// Кількість спальних местCountRooms;// Кількість комнатCountFreeBads;// Кількість залишилися вільних местtoilet;// Наявність санузлаequipment [1000];// Обладнання номераFlag; NODE * Left_Child; NODE * Right_Child;
}; convertnum (char *);// Допоміжна функція для отримання номера готельного номера без префікса у вигляді intNODE * Binary_Tree (char *, int, int, char, char *, struct NODE *, int *);// Додавання елемента в деревоNODE * Balance_Right_Heavy (struct NODE *, int *);// Перебалансировка дерева при видаленні узлаNODE * Balance_Left_Heavy (struct NODE *, int *);// Перебалансировка дерева при видаленні узлаNODE * Delete_Element (struct NODE *, int, int *, int *);// Видалення вузла з дереваDeleteAllAVL (struct NODE **);// Видалення всього дереваOutput (struct NODE *);// Висновок дерева на екранboyer_moore (char *, char *);// Функція пошуку підрядка за алгоритмом Боуер-Мураfindequip (struct NODE *, char *, int *);// Шукаємо номера за фрагментами оборудованіяfind_hotel_room (struct NODE *, char *, struct element *, struct NodeHash **, int *);// Пошук за № готельного номера (з використанням дерева, хеш-таблиці і тд) find_numbers (struct NODE *, char *, int *, int *, int);// Перевірка наявності готельного номера в базі (пошук номера в дереві) printsk (char * ,.);
avl. cpp
# define _CRT_SECURE_NO_WARNINGS
# include lt; string. h gt;
# include lt; conio. h gt;
# include lt; windows. h gt;
# include avl. h
# include hashtable. h
# include registration. h
# define F 0
# define T 1
//----------------------------------------
/* допоміжна функція для отримання номера готельного номера без префікса у вигляді int */convertnum (char * Number)
{tmp [3]; [0]=* (Number + 1); [1]=* (Number + 2); [2]=* (Number + 3); atoi (tmp );
}
//----------------------------------------
/* Додавання елемента в дерево */NODE * Binary_Tree (char * Number, int CountBads, int CountRooms, char toilet, char * equipment, struct NODE * Parent, int * H)
{NODE * Node1; NODE * Node2;
//якщо дерево порожньо (! Parent)
{= (struct NODE *) malloc (sizeof (struct NODE)); (Parent- gt; Number, Number); gt; Number [4] =laquo; raquo;;gt;CountBads=CountBads;gt;CountFreeBads=CountBads;gt;CountRooms=CountRooms;gt;toilet=toilet;(Parent-gt;equipment,equipment);gt;Left_Child =NULL; gt; Right_Child=NULL; gt; Flag=0;
* H=T; (Parent);
} (convertnum (Number) == convertnum (Parent- gt; Number))
{( Неможливо додавання двох номерів з однаковими номерами! );
_ getch (); (Parent);
} (convertnum (Number) lt; convertnum (Parent- gt; Number))
{ gt; Left_Child=Binary_Tree (Number, CountBads, CountRooms, toilet, equipment, Parent- gt; Left_Child, H); (* H)
/* Ліва галузь стала вище */(Parent- gt; Flag)
{1:
/* Right heavy */ gt; Flag=0;
* H=F ;; 0:
/* Balanced tree */ gt; Flag=- 1 ;;- 1:
/* Left heavy * /=Parent- gt; Left_Child; (Node1- gt; Flag == - 1)
{
//printf ( n Left to Left Rotation n ); gt; Left_Child=Node1- gt; Right_Child; - gt; Right_Child=Parent; gt; Flag=0;=Node1 ;
}
{
//printf ( n Left to right rotation n );=Node1- gt; Right_Child; - gt; Right_Child=Node2- gt; Left_Child; - gt; Left_Child=Node1; gt; Left_Child=Node2- gt; Right_Child; - gt; Right_Child=Parent; (Node2- gt; Flag == - 1) gt; Flag=1; gt; Flag=0; (Node2- gt; Flag == 1)- gt; Flag=- 1; - gt; Flag=0;=Node2;
} gt; Flag=0;
* H=F;
}
} (convertnum (Number) gt; convertnum (Parent- gt; Number))
{ gt; Right_Child=Binary_Tree (Number, CountBads, CountRooms, toilet, equipment, Parent- gt; Right_Child, H); (* H)
/* Права гілка стала вище */(Parent- gt; Flag)
{- 1:
/* Left heavy */ gt; Flag=0;
* H=F ;; 0:
/* Balanced tree */ gt; Flag=1 ;; 1: