Реализация общего дерева с использованием структуры данных Linked List - PullRequest
0 голосов
/ 14 июня 2011

Я пытаюсь создать следующее общее дерево:

             root
              |
       ---------------- 
       |              |       
     child          child    
                      |                      
                   ----       
                  |           
               child   
                 |
            -------------
           |     |      |
         child child  child

Я планирую использовать два класса: один хранит элемент родительского узла (класс дерева), а другой реализует связанный список для хранения дочерних элементовSingle_linked_list).

Мое определение класса для класса Tree:

template <class Object>
class Tree 
{
    private:
          Object node_val;  // this is stored in node of tree
          Single_linked_list< Tree<Object> * > children;

    public:
    // accessors and mutators

    ...
}

Я просто хотел подтвердить, что Single_linked_list< Tree<Object> * > children; должен содержать *, потому что в c ++ это путьуказав, что это должен быть указатель, указывающий начало связанного списка со всеми дочерними элементами?

Пожалуйста, дайте мне знать, если моя интерпретация этой строки кода верна.

1 Ответ

0 голосов
/ 15 июня 2011

Если я понимаю ваш вопрос, вам интересно, что означает параметр шаблона класса Single_linked_list.

Ваше заявление:

в c ++ [*] - это способ указать, что он должен быть указателем, указывающим начало связанного списка со всеми дочерними элементами

заслуживает обсуждения. Шаблонный класс Single_linked_list управляет экземплярами типа, заданного в качестве параметра шаблона. Параметр шаблона не меняет способ использования списка. Управляемый тип, определенный параметром шаблона, может быть встроенным - как указатель - или может быть классом. Каким бы ни был параметр шаблона, я бы предположил, что доступ к началу связанного списка и функциям для обхода списка будет осуществляться путем вызова методов на children, например,

Single_linked_list< SomeClassOrType > my_list;
putThingsOnList( &my_list );

my_list.goToFirst();
while( !my_list.hasNext() )
{
  SomeClassOrType &o = children.getCurrent();
  children.goToNext();
}

Первая часть вашего утверждения, приведенного выше, верна: * указывает тип указателя. Во второй части вашего утверждения я не согласен: параметр шаблона не имеет отношения к идее запуска связного списка.

Надеюсь, вы найдете мой ответ ценным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...