Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include<iostream>
- #include<fstream>
- #include<locale>
- #include <Windows.h>
- using namespace std;
- ifstream f;
- FILE* D;
- ofstream g;
- struct sp
- {
- string Name;
- string City;
- int Count;
- int Score;
- };
- struct Point
- {
- sp data;
- Point *left;
- Point *right;
- };
- Point* first(sp d)//формирование первого элемента дерева
- {
- Point* p = new Point;
- string a;
- p->data = d;
- p->left = 0;
- p->right = 0;
- return p;
- }
- //добавление элемента d в дерево поиска
- Point* Add(Point*root,sp d)
- {
- Point*p = root;//корень дерева
- Point*r = new(Point);//флаг для проверки существования элемента d
- //в дереве
- bool ok = false;
- while (p&&!ok)
- {
- r = p;
- if (d.Name == p->data.Name)ok = true; //элемент уже существует
- else
- if (d.Name<p->data.Name)p = p->left;
- //пойти в левое поддерево
- else p = p->right;//пойти в правое поддерево
- }
- if (ok) return p; //найдено, не добавляем
- //создаем узел
- Point* New_point = new Point();//выделили память
- New_point->data = d;
- New_point->left = 0;
- New_point->right = 0;
- // если d<r->key, то добавляем его в левое поддерево
- if (d.Name<r->data.Name)r->left = New_point;
- // если d>r->key, то добавляем его в правое поддерево
- else r->right = New_point;
- return New_point;
- }
- void print_Tree(Point* p, int level){
- if (p){
- print_Tree(p->left, level + 1);
- for (int i = 0; i < level; i++)cout << " ";
- cout << p->data.Name << endl;
- print_Tree(p->right, level + 1);
- }
- }
- void del(Point* &r, Point* &q)
- {
- if (r->right != NULL) del(r->right, q);
- else
- {
- q->data = r->data;
- q = r;
- r = r->left;
- }
- }
- void Delete(Point* &Tree)
- // удаление узла
- {
- Point* q;
- q = Tree;
- if (q->right == NULL) Tree = q->left;
- else if (q->left == NULL) Tree = q->right;
- else del(q->left, q);
- delete(q);
- }
- void delete_node(Point* &Tree, int t)
- // удаление узла с заданной продолжительностью
- {
- Point* p = Tree;
- if (Tree)
- {
- delete_node(Tree->right, t);
- delete_node(Tree->left, t);
- if (Tree->data.Score <= t) Delete(Tree);
- }
- }
- void print_Alf(Point *p){
- if (p)
- {
- print_Alf(p->left);
- cout << p->data.Name << " ";
- print_Alf(p->right);
- }
- }
- void Fuf(Point *p){
- if (p){
- Fuf(p->left);
- SetConsoleCP(1251);
- fwrite(&p->data, sizeof(p->data), 1, D);
- Fuf(p->right);
- }
- }
- void main()
- {
- setlocale(LC_ALL, "rus");
- int n, i, j;
- g.open("Hput.txt");
- f.open("input.txt", ios::in);
- f >> n;
- Point* t;/*
- t = first();
- print_Tree(t, 0);*/
- FILE* H;
- H = fopen("inpat.dat", "wb");
- for (int i = 0; i < n; i++)
- {
- sp a;
- f >> a.Name;
- f >> a.City;
- f >> a.Count;
- f >> a.Score;
- fwrite(&a,sizeof(a),1,H);
- }
- fclose(H);
- sp a;
- H = fopen("inpat.dat", "rb");
- fread(&a, sizeof(a), 1, H);
- t = first(a);
- for (int i = 0; i < n; i++){
- fread(&a, sizeof(a), 1, H);
- Add(t, a);
- }
- //print_Tree(t, 0);
- cout << endl;
- print_Alf(t);
- cout << endl;
- int o;
- cout << "Введите кол-во очков,для удаления элементов";
- cin >> o;
- D = fopen("output.dat", "wb");
- delete_node(t, o);
- cout << endl;
- print_Alf(t);
- Fuf(t);
- fclose(D);
- D = fopen("output.dat", "rb");
- while (!feof(D)){
- fread(&a, sizeof(a), 1, D);
- g << a.Name; g<< " ";
- g << a.City; g << " ";
- g << a.Count; g << " ";
- g << a.Score; g << " ";
- g<<endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment