llerik
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору #include <vcl.h> #include <iostream.h> #include <string.h> #pragma hdrstop #pragma argsused // Структура: struct tree { string eng; //английское слово string rus; //русский перевод int count; //количество обращений tree *left; tree *right; }; string temp_eng; string temp_rus; int temp_count; int level=0; //--------------------------------------------------------------------------- // Прототипы функций: // Функция создания первого элемента tree *first (string eng, string rus, int count); // Функция поиска и добавления элемента tree *search_insert (tree *root, string eng, string rus, int count); // Функция показа дерева void print_tree (tree *p, int level); //--------------------------------------------------------------------------- // Главная функция: void main() {int vibor; tree *root; menu2: cout<<"Najmite: "<<endl; cout<<"1| Dobavit slovo i ego perevod v slovar"<<endl; // cout<<"2) Ввести английское слово и искать его перевод"<<endl; // cout<<"3) Удалить слово из словаря"<<endl; cout<<"2| Vihod"<<endl; cout<<"3| Vivesti derevo na ekran"<<endl; cin>>vibor; switch (vibor) { case 1: {cout<<"Vvedite angliskoe slovo: "<<endl; cin>>temp_eng; cout<<"Vvedite russkoe slovo: "<<endl; cin>>temp_rus; cout<<"Vvedite znachenie schetchika: "<<endl; cin>>temp_count; //создание первого элемента дерева if (!root) root=first(temp_eng, temp_rus, temp_count); //создание элементо-потомков дерева else tree *root=search_insert (root, temp_eng, temp_rus, temp_count); }; break; case 2: exit(0); break; case 3: print_tree (root, 0); break; default: cout<<"Нужно нажать клавишу от 1 до 4"<<endl; break;} goto menu2; } //--------------------------------------------------------------------------- // Функции программы: // Функция фрмирования первого элемента дерева: tree *first (string temp_eng, string temp_rus, int count) {int i; tree *pv=new tree; pv->eng=temp_eng; pv->rus=temp_rus; pv->count=temp_count; pv->left=0; pv->right=0; return pv; } // Функция поиска и добавления элемента в дерево: tree *search_insert (tree *root, string temp_eng, string temp_rus, int temp_count) { tree *pv=root, *prev; bool found=false; //поиск по дереву while (pv&&!found) { prev=pv; if (temp_eng==pv->eng) found = true; else if (temp_count < pv->count) pv=pv->left; else pv=pv->right; } if (found) return pv; //создание нового узла tree *pnew=new tree; pnew->eng=temp_eng; pnew->rus=temp_rus; pnew->count=temp_count; pnew->left=0; pnew->right=0; if (temp_count < prev->count) prev->left=pnew; //присоединение к левому поддереву предка else prev->right=pnew; //присоединение к правому поддереву предка return pnew; } // Функция показа дерева void print_tree (tree *p, int level) {if (p) {print_tree(p->left, level+1); for (int i=0; i<level; i++) cout<<" "; cout<<p->eng; for (int i=0; i<level; i++) cout<<" "; cout<<p->rus; for (int i=0; i<level; i++) cout<<" "; cout<<p->count; print_tree (p->right, level+1); } } | Всего записей: 8 | Зарегистр. 02-05-2008 | Отправлено: 00:07 06-05-2008 | Исправлено: llerik, 00:14 06-05-2008 |
|