Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2015, 19:17   #1
Croessmans
Новичок
Джуниор
 
Регистрация: 19.10.2015
Сообщений: 5
Сообщение Реализовать базу данных ГАИ

Задание такое:

Реализовать базу данных ГАИ по штрафным квитанциям с помощью бинарного дерева. Ключом будет служить номер автомашины, значением узла - список правонарушений(односвязный список). Если квитанция добавляется в первый раз, то в дереве появляется новый узел, а в списке данные по правонарушению; если нет, то данные заносятся в существующий список. Необходимо также реализовать следующие операции:

Полная распечатка базы данных (по номерам машин и списку правонарушений, числящихся за ними)
Распечатка данных по заданному номеру
Распечатка данных по диапазону номеров
Croessmans вне форума Ответить с цитированием
Старый 19.10.2015, 19:18   #2
Croessmans
Новичок
Джуниор
 
Регистрация: 19.10.2015
Сообщений: 5
По умолчанию

А вот собственно то ,что у меня есть:

Код:
#include <iostream.h>
#include <time.h>
#include <stdlib.h>
template <typename T>
struct  node
{
    T item;
    T key;
    node *parent,*left,*right;
};
template <typename T>
class CBinTree
{
    private:
        node<T> *root;
    public:
        CBinTree()
        {root=NULL;}
        bool insert(T a,T k)
        {
            if (search(k) != NULL) return false;
            node <T> *A=new node<T>;
            A->item=a;
            A->left=NULL;
            A->right=NULL;
            A->key=k;
            node <T>* n =root;
            node <T>* m=root;
            while(n!=NULL)
            {
                m=n;
                if(A->key<n->key)
                    n=n->left;
                else
                    n=n->right;
            }
            A->parent=m;
            if(root==NULL)
                root=A;
            else
            {
                if(A->key<m->key)
                    m->left=A;
                else
                    m->right=A;
            }
            return  true;
        }
        
        node<T>* min()
        {
            node<T> *elem=root;
            if(elem!=NULL)
            while(elem->left!=NULL)
            {elem=elem->left;}
            return elem ;
        }
 
        node<T>* max()
        {
            node<T> *elem=root;
            if(elem!=NULL)
            while(elem->right!=NULL)
            {elem=elem->right;  };
            return elem;
        }
        node <T>* search(T k)
        {
            node<T> *elem=root;
            while(elem!=NULL)
            {
                if(k==elem->key) return elem;
                if(k>=elem->key)
                    elem=elem->right;
                else
                    elem=elem->left;
            }
            return NULL;
        }
Croessmans вне форума Ответить с цитированием
Старый 19.10.2015, 19:18   #3
Croessmans
Новичок
Джуниор
 
Регистрация: 19.10.2015
Сообщений: 5
По умолчанию

Код:
        void print()
        {printTree(root);}
        void printTree(node<T> *n)
        {
            if(n!=NULL)
            {
                printTree(n->left);
                cout<<"Key="<<n->key<<"\tData="<<n->item<<"\n";
                printTree(n->right);
            }
        }
 
        void showNodes(node<T> *N, int *P)
             {
        if (N != NULL)
        {
            cout << N->item << ":" << N->key << "--\t";
            (*P)++;
            showNodes(N->right, P);
            cout << endl;
            for (int i = 0; i < *P; i++) cout << "|\t";
            cout << endl;
            for (int i = 0; i < (*P) - 1; i++) cout << "|\t";
            (*P)--;
            showNodes(N->left, P);
        }
        else
            cout << "x";
 
    }
            bool Delete(T K)
    {
        node<T> *N  = NULL;
        node<T> *D  = Search(K);
        if (D == NULL)
        return  false;
        if (D == root)
        {return false;}
        if (D->left == NULL && D->right == NULL)
        {
            if (D->parent->left == D)
                D->parent->left     = NULL;
            else
                D->parent->right    = NULL;
            delete  D;
            return  true;
        }
 
        if (D->left != NULL && D->right != NULL)
        {
            if (D->parent->left == D)
            {
                D->right->parent    = D->parent;
                D->parent->left     = D->right;
                N   = D->right;
                while(N->left != NULL) N = N->left;
                N->left     = D->left;
                D->left->parent = N;
            }
            else
            {
                D->left->parent = D->parent;
                D->parent->right    = D->left;
                N   = D->left;
                while(N->right != NULL) N = N->right;
                N->right        = D->right;
                D->right->parent    = N;
            }
            delete  D;
            return  true;
        }
        if (D->left != NULL)
        {
            D->left->parent= D->parent;
            if (D->parent->left== D)
                D->parent->left= D->left;
            else
                D->parent->right= D->left;
        }
        else    
        {
            D->right->parent= D->parent;
            if (D->parent->left== D)
                D->parent->left= D->right;
            else
                D->parent->right= D->right;
        }
        delete  D;
        return  true;
    }
            void showTree()
    {
        int P   = 0;
        showNodes(root, &P);
        cout << "\n";
    }
 
};
template <typename T>
ostream &operator<<(ostream &os,node<T> &d)
{
    os<<"Key="<<d.key<<"\tData="<<d.item<<"\n";
    return os;
}
 
void main()
{
    CBinTree<int> B;
    srand(time(NULL));
    for(int i=0;i<20;i++)
    {
        while(!B.insert(i,rand()%100));
    }
cout<<*B.min()<<"\n";
cout<<*B.max()<<"\n";
    
cout<<*B.search(B.max()->key)<<"\n";
B.print();
cout<<"-----------------------------------------------------------------\n\n\n";
B.showTree();
cout<<"\n\n\n-----------------------------------------------------------------\n\n\n";
 
}
Исправте код пожалуйста.
Croessmans вне форума Ответить с цитированием
Старый 19.10.2015, 22:48   #4
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Как уже писал
Код:
std::map < NumberType , std::forward_list < OffenceType > > dat ;
P.S. Бугагага, ник-то мой занят на этом форуме, да, Vlad2556? Ты хоть узнал что такое croess, прежде чем подписываться?

Последний раз редактировалось Croessmah; 19.10.2015 в 22:51.
Croessmah вне форума Ответить с цитированием
Старый 20.10.2015, 00:27   #5
Croessmans
Новичок
Джуниор
 
Регистрация: 19.10.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Как уже писал
Код:
std::map < NumberType , std::forward_list < OffenceType > > dat ;
P.S. Бугагага, ник-то мой занят на этом форуме, да, Vlad2556? Ты хоть узнал что такое croess, прежде чем подписываться?
1) Скажите куда конкретно надо вставлять Вашу строку.
2) Нет не узнавал. Если хотите можете расказать.
Croessmans вне форума Ответить с цитированием
Старый 20.10.2015, 08:12   #6
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
Реализовать базу данных ГАИ
в смысле толкнуть?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 20.10.2015, 08:38   #7
Croessmans
Новичок
Джуниор
 
Регистрация: 19.10.2015
Сообщений: 5
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
в смысле толкнуть?
Нет. В смысле написать программу в которую добавляется нарушитель. При добавлении многих получается база даных нарушителей.

И эту программу надо реализовать через бинарное дерево.
Croessmans вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
реализовать базу данных kirjuha Помощь студентам 0 07.01.2013 17:15
Реализовать базу данных с использованием компонента NaomoVal Помощь студентам 0 21.05.2012 18:07
реализовать так, чтобы кандидат смог добавить несколько резюме в базу inret Общие вопросы Delphi 4 07.05.2008 15:46