close

Вход

Забыли?

вход по аккаунту

?

дрэва

код для вставкиСкачать
MAIN.CPP
#include "tree.h"
#include "human.h"
int main()
{
int Exit = 1, choise;
Tree<int> *t1 = new Tree<int>;
Tree<char> *t2 = new Tree<char>;
Tree<string> *t3 = new Tree<string>;
Tree<double> *t4 = new Tree<double>;
Tree<Human> t5;// = new Tree<Human>;
while(Exit)
{
clear();
cout << "Выберите тип данных для работы:" << endl
<< "1 - int" << endl
<< "2 - char" << endl
<< "3 - string" << endl
<< "4 - double" << endl
<< "5 - Human" << endl
<< "0 - выход" << endl << endl;
cin >> choise;
switch(choise)
{
case 1:{
while(Exit)
{
clear();
cout << "1 - добавить элемент" << endl
<< "2 - удалить элемент" << endl
<< "3 - просмотреть дерево" << endl
<< "4 - удалить дерево" << endl
<< "0 - отмена" << endl << endl;
cin >> choise;
int var;
switch(choise)
{
case 1: clear(); cout << "Введите элемент\n"; cin >> var; t1->Add(var); break;
case 2: clear(); cout << "Введите элемент\n"; cin >> var; t1->Remove(var); break;
case 3:{
while(Exit)
{
clear();
cout << "1: левый-правый-корень" << endl
<< "2: правый-левый-корень" << endl
<< "3: корень-левый-правый" << endl
<< "4: корень-правый-левый" << endl
<< "0: отмена" << endl << endl;
cin >> choise;
switch(choise)
{
case 1: clear(); t1->ViewLPK(); getch(); getch(); break;
case 2: clear(); t1->ViewPLK(); getch(); getch(); break;
case 3: clear(); t1->ViewKLP(); getch(); getch(); break;
case 4: clear(); t1->ViewKPL(); getch(); getch(); break;
case 0: Exit = 0; break;
default: break;
}
}
Exit = 1;
break;
}
case 4: t1->Destroy(); break;
case 0: Exit = 0; break;
default: break;
}
}
Exit = 1;
break;
}
case 2:{
while(Exit)
{
clear();
cout << "1 - добавить элемент" << endl
<< "2 - удалить элемент" << endl
<< "3 - просмотреть дерево" << endl
<< "4 - удалить дерево" << endl
<< "0 - отмена" << endl << endl;
cin >> choise;
char var;
switch(choise)
{
case 1: clear(); cout << "Введите элемент\n"; cin >> var; t2->Add(var); break;
case 2: clear(); cout << "Введите элемент\n"; cin >> var; t2->Remove(var); break;
case 3:{
while(Exit)
{
clear();
cout << "1: левый-правый-корень" << endl
<< "2: правый-левый-корень" << endl
<< "3: корень-левый-правый" << endl
<< "4: корень-правый-левый" << endl
<< "0: отмена" << endl << endl;
cin >> choise;
switch(choise)
{
case 1: clear(); t2->ViewLPK(); getch(); getch(); break;
case 2: clear(); t2->ViewPLK(); getch(); getch(); break;
case 3: clear(); t2->ViewKLP(); getch(); getch(); break;
case 4: clear(); t2->ViewKPL(); getch(); getch(); break;
case 0: Exit = 0; break;
default: break;
}
}
Exit = 1;
break;
}
case 4: t2->Destroy(); break;
case 0: Exit = 0; break;
default: break;
}
}
Exit = 1;
break;
}
case 3:{
while(Exit)
{
clear();
cout << "1 - добавить элемент" << endl
<< "2 - удалить элемент" << endl
<< "3 - просмотреть дерево" << endl
<< "4 - удалить дерево" << endl
<< "0 - отмена" << endl << endl;
cin >> choise;
string var;
switch(choise)
{
case 1: clear(); cout << "Введите элемент\n"; cin >> var; t3->Add(var); break;
case 2: clear(); cout << "Введите элемент\n"; cin >> var; t3->Remove(var); break;
case 3:{
while(Exit)
{
clear();
cout << "1: левый-правый-корень" << endl
<< "2: правый-левый-корень" << endl
<< "3: корень-левый-правый" << endl
<< "4: корень-правый-левый" << endl
<< "0: отмена" << endl << endl;
cin >> choise;
switch(choise)
{
case 1: clear(); t3->ViewLPK(); getch(); getch(); break;
case 2: clear(); t3->ViewPLK(); getch(); getch(); break;
case 3: clear(); t3->ViewKLP(); getch(); getch(); break;
case 4: clear(); t3->ViewKPL(); getch(); getch(); break;
case 0: Exit = 0; break;
default: break;
}
}
Exit = 1;
break;
}
case 4: t3->Destroy(); break;
case 0: Exit = 0; break;
default: break;
}
}
Exit = 1;
break;
}
case 4:{
while(Exit)
{
clear();
cout << "1 - добавить элемент" << endl
<< "2 - удалить элемент" << endl
<< "3 - просмотреть дерево" << endl
<< "4 - удалить дерево" << endl
<< "0 - отмена" << endl << endl;
cin >> choise;
double var;
switch(choise)
{
case 1: clear(); cout << "Введите элемент\n"; cin >> var; t4->Add(var); break;
case 2: clear(); cout << "Введите элемент\n"; cin >> var; t4->Remove(var); break;
case 3:{
while(Exit)
{
clear();
cout << "1: левый-правый-корень" << endl
<< "2: правый-левый-корень" << endl
<< "3: корень-левый-правый" << endl
<< "4: корень-правый-левый" << endl
<< "0: отмена" << endl << endl;
cin >> choise;
switch(choise)
{
case 1: clear(); t4->ViewLPK(); getch(); getch(); break;
case 2: clear(); t4->ViewPLK(); getch(); getch(); break;
case 3: clear(); t4->ViewKLP(); getch(); getch(); break;
case 4: clear(); t4->ViewKPL(); getch(); getch(); break;
case 0: Exit = 0; break;
default: break;
}
}
Exit = 1;
break;
}
case 4: t4->Destroy(); break;
case 0: Exit = 0; break;
default: break;
}
}
Exit = 1;
break;
}
case 5:{
while(Exit)
{
clear();
cout << "1 - добавить элемент" << endl
<< "2 - удалить элемент" << endl
<< "3 - просмотреть дерево" << endl
<< "4 - удалить дерево" << endl
<< "0 - отмена" << endl << endl;
cin >> choise;
Human var;
switch(choise)
{
case 1: clear(); cout << "Введите элемент\n"; cin >> var; t5.Add(var); break;
case 2: clear(); cout << "Введите элемент\n"; cin >> var; t5.Remove(var); break;
case 3:{
while(Exit)
{
clear();
cout << "1: левый-правый-корень" << endl
<< "2: правый-левый-корень" << endl
<< "3: корень-левый-правый" << endl
<< "4: корень-правый-левый" << endl
<< "0: отмена" << endl << endl;
cin >> choise;
switch(choise)
{
case 1: clear(); t5.ViewLPK(); getch(); getch(); break;
case 2: clear(); t5.ViewPLK(); getch(); getch(); break;
case 3: clear(); t5.ViewKLP(); getch(); getch(); break;
case 4: clear(); t5.ViewKPL(); getch(); getch(); break;
case 0: Exit = 0; break;
default: break;
}
}
Exit = 1;
break;
}
case 4: t5.Destroy(); break;
case 0: Exit = 0; break;
default: break;
}
}
Exit = 1;
break;
}
case 0: Exit = 0; break;
default: break;
}
}
return 0;
}
TREE.H
#ifndef TREE_H
#define TREE_H
#include "lib.h"
template <typename T>
struct Node
{
T data;
Node<T> *left, *right;
Node(): left(NULL), right(NULL){}
~Node(){delete left; delete right;}
};
template <typename T>
class Tree
{
private:
Node<T> *head;
public:
Tree();
Tree(T);
~Tree();
void Add(T);
void Remove(T);
void ViewLPK();
void ViewPLK();
void ViewKLP();
void ViewKPL();
void Destroy();
Node<T>* DestroyTree(Node<T>*);
Node<T>* RemoveNode(Node<T>*, T);
Node<T>* AddNode(Node<T>*, T);
void ViewTreeLPK(Node<T>*);
void ViewTreePLK(Node<T>*);
void ViewTreeKPL(Node<T>*);
void ViewTreeKLP(Node<T>*);
};
template <typename T>
Tree<T>::Tree(): head(NULL){}
template <typename T>
Node<T>* Tree<T>::DestroyTree(Node<T> *root)
{
if(root)
{
if(root->left != NULL)
{
root->left = DestroyTree(root->left);
}
if(root->right != NULL)
{
root->right = DestroyTree(root->right);
}
delete root;
}
return NULL;
}
template <typename T>
void Tree<T>::Destroy()
{
head = DestroyTree(head);
}
template <typename T>
void Tree<T>::Remove(T x)
{
head = RemoveNode(head, x);
}
template <typename T>
Node<T>* Tree<T>::RemoveNode(Node<T> *root, T x)
{
Node<T> *t = new Node<T>;
if(root == NULL) return NULL;
if(x == root->data)
{
if(root->left == NULL)
{
t = root->right;
delete root;
return t;
}
t = root->left;
while(t->right)
{
t = t->right;
}
t->right = root->right;
return root->left;
}
if(x <= root->data)
root->left = RemoveNode(root->left, x);
else
root->right = RemoveNode(root->right, x);
return root;
}
template <typename T>
void Tree<T>::Add(T x)
{
if(head = AddNode(head, x)) cout << "ololo";
system("sleep 2");
}
template <typename T>
Node<T>* Tree<T>::AddNode(Node<T> *root, T x)
{
if(root == NULL)
{
root = new Node<T>;
root->data = x;
}
else
{
if(x <= root->data)
{
root->left = AddNode(root->left, x);
}
else
{
root->right = AddNode(root->right, x);
}
}
return root;
}
template <typename T>
Tree<T>::~Tree(){Destroy();}
template <typename T>
void Tree<T>::ViewTreeLPK(Node<T> *root)
{
if(root->left)
{
ViewTreeLPK(root->left);
}
if(root->right)
{
ViewTreeLPK(root->right);
}
cout << root->data << endl;
}
template <typename T>
void Tree<T>::ViewTreePLK(Node<T> *root)
{
if(root->right)
{
ViewTreePLK(root->right);
}
if(root->left)
{
ViewTreePLK(root->left);
}
cout << root->data << endl;
}
template <typename T>
void Tree<T>::ViewTreeKPL(Node<T> *root)
{
cout << root->data << endl;
if(root->right)
{
ViewTreeKPL(root->right);
}
if(root->left)
{
ViewTreeKPL(root->left);
}
}
template <typename T>
void Tree<T>::ViewTreeKLP(Node<T> *root)
{
cout << root->data << endl;
if(root->left)
{
ViewTreeKLP(root->left);
}
if(root->right)
{
ViewTreeKLP(root->right);
}
}
template <typename T>
void Tree<T>::ViewLPK()
{
ViewTreeLPK(head);
}
template <typename T>
void Tree<T>::ViewPLK()
{
ViewTreePLK(head);
}
template <typename T>
void Tree<T>::ViewKLP()
{
ViewTreeKLP(head);
}
template <typename T>
void Tree<T>::ViewKPL()
{
ViewTreeKPL(head);
}
template <typename T>
Tree<T>::Tree(T x)
{
head = AddNode(head, x);
}
#endif // TREE_H
LIB.H
#ifndef LIB_H
#define LIB_H
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
using namespace std;
#define clear(); system("cls");
struct Data
{
int date[3];
char *country;
};
#endif // LIB_H
HUMAN.H
#ifndef HUMAN_H
#define HUMAN_H
#include "lib.h"
class Human
{
protected:
char *f, *i, *o;
char *year;
public:
Human();
Human(char*, char*, char*, char*);
Human(const Human&);
virtual ~Human();
virtual void Edit(int);
virtual char* View(int)const;
int operator < (const Human&);
int operator > (const Human&);
int operator <= (const Human&);
int operator >= (const Human&);
friend ostream& operator << (ostream&, const Human&);
friend istream& operator >> (istream&, Human&);
int operator == (const Human&);
Human operator = (const Human);
};
#endif // HUMAN_H
HUMAN.CPP
#include "human.h"
Human::Human()
{
f = new char[80];
i = new char[80];
o = new char[80];
year = new char[80];
}
Human::Human(char *F, char *I, char *O, char *Y)
{
f = new char [strlen(F) + 1];
strcpy(f, F);
i = new char [strlen(I) + 1];
strcpy(i, I);
o = new char [strlen(O) + 1];
strcpy(o, O);
year = new char [strlen(Y) + 1];
strcpy(year, Y);
}
Human::Human(const Human &ob)
{
this->f = new char [strlen(ob.f) + 1];
strcpy(this->f, ob.f);
this->i = new char [strlen(ob.i) + 1];
strcpy(this->i, ob.i);
this->o = new char [strlen(ob.o) + 1];
strcpy(this->o, ob.o);
strcpy(this->year, ob.year);
}
Human::~Human()
{
delete f;
delete i;
delete o;
delete year;
}
void Human::Edit(int choise)
{
char tmp[80];
switch(choise)
{
case 1:
cout << "Введите фамилию" << endl;
cin >> tmp;
f = new char[strlen(tmp) + 1];
strcpy(f, tmp); break;
case 2:
cout << "Введите имя" << endl;
cin >> tmp;
i = new char[strlen(tmp) + 1];
strcpy(i, tmp); break;
case 3:
cout << "Введите отчество" << endl;
cin >> tmp;
o = new char[strlen(tmp) + 1];
strcpy(o, tmp); break;
case 4:
cout << "Введите дату рождения" << endl;
cin.getline(year, 10); break;
default: break;
}
}
char* Human::View(int choise)const
{
switch(choise)
{
case 1:
if(f!=NULL) return f;
else return NULL;
case 2:
if(i!=NULL) return i;
else return NULL;
case 3:
if(o!=NULL) return o;
else return NULL;
case 4:
return year;
default: return NULL;
}
}
int Human::operator < (const Human &t)
{
int s1 = strlen(t.f) + strlen(t.i) + strlen(t.o) + strlen(t.year);
int s2 = strlen(this->f) + strlen(this->i) + strlen(this->o) + strlen(this->year);
if(s1 > s2) return 1;
return 0;
}
int Human::operator <= (const Human &t)
{
int s1 = strlen(t.f) + strlen(t.i) + strlen(t.o) + strlen(t.year);
int s2 = strlen(this->f) + strlen(this->i) + strlen(this->o) + strlen(this->year);
if(s1 >= s2) return 1;
return 0;
}
int Human::operator > (const Human &t)
{
int s1 = strlen(t.f) + strlen(t.i) + strlen(t.o) + strlen(t.year);
int s2 = strlen(this->f) + strlen(this->i) + strlen(this->o) + strlen(this->year);
if(s1 < s2) return 1;
return 0;
}
int Human::operator >= (const Human &t)
{
int s1 = strlen(t.f) + strlen(t.i) + strlen(t.o) + strlen(t.year);
int s2 = strlen(this->f) + strlen(this->i) + strlen(this->o) + strlen(this->year);
if(s1 <= s2) return 1;
return 0;
}
int Human::operator == (const Human &t)
{
if(strcmp(this->f, t.f)!=0) return 0;
if(strcmp(this->i, t.i)!=0) return 0;
if(strcmp(this->o, t.o)!=0) return 0;
if(strcmp(this->year, t.year)!=0) return 0;
return 1;
}
ostream& operator << (ostream &out, const Human &t)
{
out << "Фамилия: ";
out << t.f << endl;
out << "Имя: ";
out << t.i << endl;
out << "Отчество: ";
out << t.o << endl;
out << "Дата рождения: ";
out << t.year << endl;
return out;
}
istream& operator >> (istream &in, Human &t)
{
cout << "Введите фамилию: ";
in >> t.f;
cout << "Введите имя: ";
in >> t.i;
cout << "Введите отчество: ";
in >> t.o;
cout << "Введите дату рождения: ";
in >> t.year;
return in;
}
Human Human::operator = (const Human t)
{
f = new char[strlen(t.f) + 1];
strcpy(f, t.f);
i = new char[strlen(t.i) + 1];
strcpy(i, t.i);
o = new char[strlen(t.o) + 1];
strcpy(o, t.o);
year = new char[strlen(t.year) + 1];
strcpy(year, t.year);
return *this;
}
Автор
ya.carapuz
Документ
Категория
Без категории
Просмотров
21
Размер файла
14 Кб
Теги
дрэва
1/--страниц
Пожаловаться на содержимое документа