Структуры данных со ссылками на себя
В предыдущих примерах мы рассмотрели то как размещать обычные типы данных в динамической области памяти и выполнять их инициализацию.
Однако, для того чтобы строить сложные динамические структуры данных (списки, деревья, графы...) необходима возможность описания структур данных которые могут ссылаться сами на себя, то есть требуется создание ссылки на структуру данных, которая еще не существует (не описана).
Ада позволяет решить подобную проблему осуществляя неполное описание типа.
При неполном описании просто указывается имя типа, который еще не описан.
После этого компилятор ожидает, что полное описание типа будет дано до завершения файла с исходным текстом:
type Element; -- неполное описание типа
type Element_Ptr is access Element; type Element is -- полное описание типа record Value : Integer; Next : Element_Ptr; end record; Head_Element : Element_Ptr; -- переменная которая будет началом списка |
Теперь мы можем построить простой связанный список, началом которого будет переменная Head_Element, следующим образом:
Head_Element := new Element'( Value => 1, Next => (new Element'( Value => 2, Next => (new Element'( Value => 3, Next => null))))); |
Данный список содержит всего три элемента (узла).
Следует обратить внимание на то, что в последнем элементе списка ссылка Next
имеет значение null.