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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2010, 16:39   #11
Смородинка
Пользователь
 
Аватар для Смородинка
 
Регистрация: 29.09.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от nowaalex Посмотреть сообщение
так подходит?
Всё супер! Что б я без вас делала Осталось только хорошенько разобраться в коде, чтобы нормально сдать, но, думаю, что тут я справлюсь
Смородинка вне форума Ответить с цитированием
Старый 21.11.2010, 17:21   #12
nowaalex
Пользователь
 
Регистрация: 22.08.2010
Сообщений: 59
По умолчанию

еще короче))

Код:
#include <iostream>

class Tree
{
private:

    struct Numbers
    {
        unsigned int digit;
        bool wasItRepeated;
        Numbers * left, * right;
    } * Root;

    void recursivePrint( Numbers * root )
    {
        if( root )
        {
            recursivePrint( root->left );
            root->wasItRepeated || std::cout<<root->digit<<"\n";
            recursivePrint( root->right );
        }
    }

    void recursiveClean( Numbers ** root )
    {
        if( *root )
        {
            recursiveClean( &( ( *root )->left ) );
            recursiveClean( &( ( *root )->right ) );
        }
        delete * root;
    }

public:

    Tree() { Root = NULL; }
    ~Tree() { recursiveClean( &Root ); }

    bool insert( unsigned int digit )
    {
        Numbers ** elem = &Root;

        while( *elem )
        {
            if( digit == ( *elem )->digit )
            {
                if( !( *elem )->wasItRepeated )
                    ( *elem )->wasItRepeated = true;
                return false;
            }
            digit < ( *elem )->digit ? elem = &( ( *elem )->left ) : elem = &( ( *elem )->right );
        }
        ( *elem ) = new( Numbers );

        ( *elem )->wasItRepeated = false;
        ( *elem )->digit = digit;
        ( *elem )->left = ( *elem )->right = NULL;
        return true;
    }

    void print()
    {
        std::cout<<"Numbers, which do not repeat:\n";
        recursivePrint( Root );
    }
};

int main()
{
    char * strings[] =
    {
        "alala0012345",
        "43foggh03004fsg",
        "def344gfg",
        "dde45"
    };

    Tree Obj;

    for( unsigned int j = 0, val; j < ( sizeof( strings ) / sizeof( char* ) ); j++ )
        for( char * p = strings[ j ]; *p; )
        {
            for( val = 0; *p >= '0' && *p <= '9'; *p++ )
                val = 10 * val + *p - '0';
            val ? Obj.insert( val ) : *p++;
        }

    Obj.print();
    return 0;
}

Последний раз редактировалось nowaalex; 21.11.2010 в 17:25.
nowaalex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Массив строк Jane-sad Помощь студентам 2 22.10.2010 15:10
массив строк. zhenya.ya Общие вопросы C/C++ 2 24.09.2010 00:14
Массив строк L_Killer Помощь студентам 2 30.05.2010 01:58
Массив строк Siluet Помощь студентам 2 30.05.2009 07:38
Массив строк С++ Nina+ Помощь студентам 1 01.04.2009 23:22