2016-10-17 7 views
-4

Я нашел так много алгоритмов в google, но я не могу найти runnable алгоритм, который конвертирует infix в postfix. Как преобразовать уравнение инфикса в постфиксное уравнение на C#? Пожалуйста, помогите ...Как преобразовать уравнение инфикса в постфиксное уравнение на C#?

+0

Взгляните на это сообщение http://stackoverflow.com/questions/1438030/infix-to-postfix-converter или этот http://www.codeproject.com/Tips/370486/Converting-InFix-to -PostFix-используя-CSharp-VB-NET – Mulflar

ответ

0

Это отличный небольшой проект для обучения программированию. Есть две части: проанализируйте код в дереве, затем напечатайте дерево как постфикс. Каждый узел дерева является оператором с двумя детьми: 4 + (5/6) имеет + в качестве корневого узла, а для детей 4 и 5/6. Когда вы смотрите глубже на узел 5/6, вы найдете родителя с двумя детьми: родительский /, а дети - 5 и 6.

Разбор является самой сложной частью. Чтобы разобрать выражение, посмотрите на то, что вам нужно проанализировать, найти оператора и отметить, что осталось от оператора и что находится справа. Оператором является узел, и у него двое детей: Parse(stuff to the left) и Parse(stuff to the right). Вам нужно обратить особое внимание на минус (который является унарным оператором и поэтому не строго инфикс). Я предлагаю обрабатывать минус как частный случай: -4 следует разобрать как -4, а не минус узел с одним ребенком 4. При анализе уравнения все внутренние узлы должны быть операторами, а все листовые узлы будут числами.

После того, как вы разобрали его, просто распечатайте. Для корневого узла print(node) напечатает «(« левый ребенок »(напечатайте его рекурсивно), правый ребенок (напечатайте его рекурсивно), оператор, затем закройте выражение (узел)«) ».

У меня нет ссылки на алгоритм, но вы действительно будете расти намного больше, если будете реализовывать его самостоятельно.

Смежные вопросы