Я начал с назначения программирования. Мне пришлось составлять DFA на основе графиков. Вот структура данных, которые я использовал для этого:Создайте новую копию структуры данных на основе указателей
typedef struct n{
struct n *next[255]; //pointer to the next state. Value is NULL if no transition for the input character(denoted by their ascii value)
bool start_state;
bool end_state;
}node;
Теперь у меня есть графическая структура DFA, готовая ко мне. Мне нужно использовать этот DFA в нескольких местах; DFA будет изменен в каждом из этих нескольких мест. Но я хочу, чтобы немодифицированные DFA были переданы этим различным функциям. Один из способов - создать копию этого DFA. Каков самый элегантный способ сделать это? Таким образом, все они инициализируются либо значением NULL, либо некоторым указателем на другое состояние.
Примечание: Я хочу, чтобы копия будет создана в вызываемой функции, т.е. я пройти DFA, вызываемая функция создает свою копию и делает работу на нем. Таким образом, мой оригинальный DFA остается без изменений.
ДОПОЛНИТЕЛЬНЫЕ ПРИМЕЧАНИЯ: Из каждого узла DFA, я могу иметь направленный край, соединяющий его с другим краем, если переход происходит, когда есть входной алфавит c
затем state->next[c]
будет иметь указатель на следующий узел. Возможно, что несколько элементов массива next
имеют значение NULL. Изменение NFA означает как добавление новых узлов, так и изменение существующих узлов.
'memcpy' возможно? – leppie
'memcpy()' struct, а затем рекурсивно 'memcpy() 'элементы' next'? – millimoose
Могут ли изменения изменить указатели в массиве 'next', или они изменят значения' struct n', на которые они указывают? –