Впервые встречаю понятие "динамические структуры". То ли понятие неверное, то ли перевод кривой. Динамических структур в C++ быть не может в принципе, т.к. структура - это железно заданный порядок данных или нескольк заданных порядков (если присутствуют объединения или т.п.). Есть динамические объекты - это переменные типов этих структур, при том динамически создаваемые, но никак не динамические структуры.
В примере у тебя - двусвязный список, когда каждый элемент списка указывает на предыдущий и следующий элементы. Две звёздочки - это как раз указатель на указатель, потому как указатель - тоже тип данных. Три звёздочки - указатель на указатель на указатель. Всё предельно просто, если не заморачиваться. Для лучшей читаемости кода иногда создают новый тип через typedef, тогда не придётся писать много звёздочек.
Я не вникал в код, но мне не совсем понятно, зачем в коде нужен указатель на указатель, потому как обычно вполне достаточно просто указателя на родительский (основной) элемент.
Вот мой кусок кода из лабораторной по двусвязным спискам:
template <typename t, int base_hash>
ListItem<t, base_hash>* ListItem<t, base_hash>::AddToTail(t data)
{
count++;
if(next) return next->AddToTail(data);
ListItem* item = new ListItem(data);
next = item;
item->prev = this;
return item;
}
Тут в процессе участвует только указатель (this), но не указатель на указатель (зачем?). Здесь по цепочки просматривается весь список и находится последний элемент, к которому и прицепляется добавляемый элемент. Можно было избежать рекурсивного вызова функций, сделав цикл.