Первая вещь я думаю о том, когда я считал этот вопрос: , какие типы вещей используют графики/деревья? и затем я думаю назад к тому, как я мог использовать их.
, Например, возьмите два общего использования дерева:
DOM и XML в этом отношении, напоминают древовидные структуры.
Это имеет смысл, также. Это имеет смысл из-за того, как эти данные должны быть расположены . Файловая система, также. В системе UNIX существует корневой узел, и переходящий вниз ниже. При монтировании нового устройства Вы присоединяете его на дерево.
необходимо также спрашивать себя: данные попадают в этот тип структуры? Создайте структуры данных, которые имеют смысл к проблеме, и остальные будут следовать.
До того, чтобы быть легче, я думаю, что это относительно. Действительно ли Вы хороши с рекурсивными функциями для пересечения дерева/графика? Что, если необходимо сбалансировать дерево?
Думают о программе, которая решает загадку поиска слова. Вы могли планировать все буквы поиска слова в график и проверки окружающие узлы, чтобы видеть, распознает ли та строка какое-либо из слов. Но Вы не могли только сделать того же с с единым массивом? Все, что действительно необходимо сделать, переместить индекс для проверки букв налево и права, и шириной для проверки выше и ниже букв. Решение этой проблемы с графиком не является трудным, но это может создать большую дополнительную работу и трудность, если Вы не довольны использованием их - конечно, который не должен отговаривать Вас делать его, особенно если Вы узнаете о них.
я надеюсь, что это помогает Вам думать об этих структурах. Что касается книжной рекомендации, я должен был бы пойти с [1 115] Введение в Алгоритмы .
Какую команду вы выполняете? next
перейдет к следующей строке при отладке my_func1 (my_func2 (my_func3 (val)));
, но шаг
должен ввести my_func3.
Пример:
int my_func1(int i)
{
return i;
}
int my_func2(int i)
{
return i;
}
int my_func3(int i)
{
return i;
}
int main(void)
{
return my_func1(my_func2(my_func3(1)));
}
Отлажено:
(gdb) b main
Breakpoint 1 at 0x4004a4: file c.c, line 19.
(gdb) run
Starting program: test
Breakpoint 1, main () at c.c:19
19 return my_func1(my_func2(my_func3(1)));
(gdb) step
my_func3 (i=1) at c.c:14
14 return i;
(gdb) step
15 }
(gdb) step
my_func2 (i=1) at c.c:9
9 return i;
(gdb) step
10 }
(gdb) step
my_func1 (i=1) at c.c:4
4 return i;
(gdb) step
5 }
(gdb) step
main () at c.c:20
20 }
(gdb) cont
Continuing.
Program exited with code 01.
(gdb)
Да, хотя вы могли испачкать руки при разборке. Сначала попробуйте команду step
(сокращение s
). Если это не приводит вас к my_func3 ()
, попробуйте вместо этого команду stepi
(сокращение si
) для выполнения одной инструкции за раз. Это может потребовать нескольких вызовов, поскольку может быть много инструкций, настраивающих аргументы вызова функции и выполняющих очистку после этого.