Алгебраический тип данных, эквивалентный в C

Я пишу программу, которая считывает поток данных и разбирает его на несколько значений: целые числа, числа с плавающей запятой, символы или составное значение, которое содержит набор значений (может быть вложенным). , Как я мог представить это в C? Я думал о объединении int , float , char , а затем имел массив указателей на такие объединения для составного значения, но это не может быть вложенным.

7
задан pmod 30 August 2010 в 19:29
поделиться

2 ответа

(я воображаю, что вы анализируете файл Xml)

Предположим, что у вас есть куча узлов. Каждый узел может иметь значение, он может быть одним из множества братьев и сестер и может иметь дочерние элементы. Это даст вам такую ​​​​структуру, как:

 struct Node
 {
       DATA Value;
       DATATYPE  Type;
       Node* nextSibling;
       Node* firstChild;
 };

DATA может быть объединением, как вы описали, или отдельными переменными. Однако, поскольку вы будете считывать из него значения в том же виде, в каком вы их сохранили, объединение должно быть в порядке. DATATYPE должно быть перечислением.

4
ответ дан 7 December 2019 в 12:12
поделиться

Вы имеете в виду char, а не char[]? Все значения char могут храниться в int. Если уж на то пошло, можно с уверенностью сказать, что все нужные вам значения int (и все возможные значения int на вашем компьютере) могут быть точно представлены как double.

Итак, я рекомендую древовидную структуру с двойными полезной нагрузкой в ​​узлах. Используйте enum для различения типа, если это необходимо. Вы можете представить n-арное дерево, используя один дочерний указатель и один указатель «следующий» связанного списка… Где-то в Википедии есть диаграмма, но я не могу ее найти :v( .

1
ответ дан 7 December 2019 в 12:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: