Рефераты | Рефераты по информатике, программированию | Двоичные деревья поиска | страница реферата 8 | Большая Энциклопедия Рефератов от А до Я
Большая Энциклопедия Рефератов от А до Я
  • Рефераты, курсовые, шпаргалки, сочинения, изложения
  • Дипломы, диссертации, решебники, рассказы, тезисы
  • Конспекты, отчеты, доклады, контрольные работы

  • NIL, NULL и маленькие хитрости

    Нередко алгоритмы, просто выглядящие на бумаге, становятся нагромождением сплошных конструкций if в реальной программе. Почему? Ответ очевиден: многие алгоритмы для работы с деревьями предполагают, что (NIL).parent == (NIL).left == (NIL).right == NIL. Вроде всё ясно и даже логично, но ведь во многих языках программирования NIL/NULL – это ноль. А обращение по нулевому адресу памяти чревато нехорошими вещами. Что же делать? Ведь мало того, что все эти if тормозят программу, в них легко запутаться! Решение просто: мы не будем использовать NIL! Действительно, алгоритмам совершенно всё равно, какое численное значение имеет NIL, главное, чтобы адрес любой реальной вершины в дереве не был ему равен. Поэтому вместо NIL мы будем использовать адрес переменной, проинициализированной особым образом. Я покажу это на языке С++, но думаю, этот пример можно будет перевести и на другие языки, хотя там, скорее всего, нет шаблонов, и придется пожертвовать типобезопасностью.

    template <class CTree>class CTreeBase

    {

    protected:

      CTree * lpCParent;

      CTree * lpCLeft;

      CTree * lpCRight;

    public:

      CTreeBase(CTreeBase * lpCParentInit, CTreeBase * lpCLeftInit,

        CTreeBase * lpCRightInit)

      {

        lpCParent = (CTree *)lpCParentInit;

        lpCLeft   = (CTree *)lpCLeftInit;

        lpCRight  = (CTree *)lpCRightInit;

      }

    };

    /////////////////////////////////////

    class CTree : public CTreeBase<CTree>

    {

    private:


    Рекомендуем скачать другие рефераты по теме: шпаргалки по математике, шпаргалки по гражданскому.



    Предыдущая страница реферата | 3  4  5  6  7  8  9  10  11  12  13 |




    Поделитесь этой записью или добавьте в закладки

       




    Категории:



    Разделы сайта




    •