Бинарное дерево

  • Автор темы tgg
  • Дата начала
T

tgg

Гость
#1
Программа:
Составить программу, которая содержит текущую информацию о книгах в библиотеке.
Сведения о книгах включают:
- номер УДК;
- фамилию и инициалы автора;
- название;
- год издания;
- количество экземпляров данной книги в библиотеке.
Программа должна обеспечивать:
- начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева;
- добавление данных о книгах, вновь поступающих в библиотеку;
- удаление данных о списываемых книгах;
- по запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам издания.

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content">
Код:
#include <iostream>
#include <locale>
#include <ctime>
#include <string>
using namespace std;

typedef struct library{ 
char author[100];  
int udk;	 
char title[20];  
int year;	
int q;	
struct library * next;	
}Node;

void addNode( Node *& list ); 
void deleteNode( Node *& list, const int num ); 
void outNodeNum( const Node * list, int num); 

void outNode( const Node * list ); 
void out( const Node * list ); 
bool if_end( char * ch, wchar_t *str = L"" );
//_________ MAIN_________________
int main(int argc, char *argv[])
{ 
Node * list = NULL;
wcout.imbue(locale(".866"));
addNode( list );
outNode( list );
int num;
wcout << L"\n\nВведите номер УДК для просмотра информации о данной книге > ";
cin >> num;		getchar();
wcout << L"\n\nКнига с номером УДК "; cout << num;
outNodeNum( list, num );
wcout << L"\n\nУдаление книги по заданному номеру УДК > "; 
cin >> num;		getchar();
deleteNode( list, num );
wcout << L"\n\nОставшиеся книги:";
outNode( list );
wcout << L"\n\nНажмите клавишу Enter для выхода из программы";
getchar(); // пауза
return 0;
}
//________ END MAIN ______________
void addNode( Node *& list ){
wcout << L"Введите данные о книгах:\n";
wcout << L"Для выхода введите слово \"end\"\n\n";
int num = 0;
while(1){
num++;
wcout << L"\nДанные о книге с № " << num << endl;
Node * n = new Node;
if( if_end( n->author,L"Введите автора книги > " )) break;
if( if_end( n->title, L"Введите название > " )) break;
wcout << L"Введите УДК > ";
cin >> n->udk;

wcout << L"Введите год издания > ";
cin >> n->year;
wcout << L"Введите кол-во книг > ";
cin >> n->q;getchar();

n->next = list; 
list = n;
}
}
bool if_end( char * ch, wchar_t *str ){
wcout << str;
gets( ch );
if( strcmp( ch, "end" )) return false;
return true;
}
void out( const Node * list, int num ){
wcout << L"\n\nКнига с УДК № " << num;
wcout << L"\nАвтор книги > " << list->author;
wcout << L"\nНомер УДК > "; cout << list->udk;
wcout << L"\nНазвание > " << list->title;
wcout << L"\nГод издания > "; cout << list->year;
wcout << L"\nКол-во книг > "; cout << list->q;
}
void outNode( const Node * list ){
int n = 1;
for(; list; list = list->next ){
out( list, n );
n++;
}
}
void outNodeNum( const Node * list, int num ){
int n = 1;
for(; list; list = list->next ){
if( list->udk == num )
out( list, n++ );
}
}
void deleteNode( Node *& list, const int num ){
int n = 1;
Node *x, *y = list, *begin = list;
wcout << L"\n\n_____ Удаление: ________";
while( list ){
if( list->udk == num ){
x = list->next;
out( list, n );
n++;
if( list != y ){
delete list;
y->next = list = x;
}// end if( list != y ){
else{
delete list;
y = list = x;
}// end if( list != y ){
}// end if( list->UDK == num ){
else{
y = list;
list = list->next;
}// end else if( list->UDK == num )
}// end while()
list = begin;
}// end deleteNode()
Как организовать биноарное дерево? исправьте, пожалуйста, программу