Préfixe Infix Algorithme de Conversion avec la figure
Après quelques recherche sur google j'ai trouver!
Préfixe à Infixe
Cet algorithme est un non-queue méthode récursive.
L'inversion de la chaîne d'entrée est complètement poussé dans une pile.
prefixToInfix(stack)
1) IF stack is not empty
a. Temp -->pop the stack
b. IF temp is a operator
i. Write a opening parenthesis to output
ii. prefixToInfix(stack)
iii. Write temp to output
iv. prefixToInfix(stack)
v. Write a closing parenthesis to output
c. ELSE IF temp is a space -->prefixToInfix(stack)
d. ELSE
i. Write temp to output
ii. IF stack.top NOT EQUAL to space -->prefixToInfix(stack)
lorsque le haut de la Pile est
F(ABC)
et nous entrons dans l'algorithme, "Une" est écrit à la sortie qu'il est actuellement la valeur de
temp=A (dis)
Maintenant comment j'ai obtenu un - " sur la colonne de sortie selon l'algorithme de la prochaine temp valeur de "B" qui a été utilisée à partir de la pile après le dernier appel récursif.
Comment le diagramme est en montrant la sortie "((A-" ...
Où je suis en train de faire l'hypothèse erronée ?
Quelqu'un pourrait-il prendre la peine de l'expliquer ?
- gre??....quoi?....
- Vous n'obtiendrez pas de "-" à partir de F(ABC).
Vous devez vous connecter pour publier un commentaire.
Je ne comprends pas très bien votre question.
Si votre pile est
ABC
,F(ABC)
pop la Une, va dans la direction de la d.j'. et écrit Une sortie, va dans d.ii. et effectueF(BC)
, qui, à la fin, écrire à la fois les B et C à la sortie.Si vous souhaitez que votre sortie à regarder comme il le fait sur le diagramme, vous aurez besoin de votre pile à
* - A B C
(notez l'espace entre chaque élément!).Edit:
(En aparté: tout cela est plus facile traversai que décrit, alors je vous suggère d'écrire l'algorithme d'un programme et de le lancer dans le choix de votre débogueur.)
OK, si vous avez stocké la première
*
danstemp
(a), écrit un(
b.j'.), et a appelé l'algorithme avec le reste de la pile (b.ii.). Cela jette une vierge, vous magasin un-
dans la prochaine branchetemp
, écrire un(
, et a appelé l'algorithme avec le reste de la pile. À un certain moment, vous vous retrouvez dans d.ii., vous avez juste écrit Une sortie, vous donnantet le reste de la pile est
avec un espace sur le dessus et une autre de l'espace entre B et C.
Donc aujourd'hui d'.ii. trouve l'espace et de ne rien faire de plus: cette branche de contrôle est fait, et nous en retourner d'où nous venons, qui a été d.ii. dans votre
-
de contrôle de la direction générale. Vous écrivez le-
de sortie d.iii., appel de l'algorithme avec le reste de la pile (_B_C
) à d.iv., et là vous allez, la rédaction de laB
, un)
, le*
etC
et le dernier)
.Juste se rappeler d'où vous venez, si vous savez où pour revenir après votre récursivité est fait.
*
et-
sur votre tapis!Temp
contenu, et à la sortie de chaque point dans l'exécution de votre? Quelque chose comme "après une.j'.: pile = " - A B C',
Temp` = '*
', sortie = '(
'". Chaque fois que vos branches d'exécution, vous voudrez peut-être commencer une nouvelle table, transportant plus de la sortie et de la pile. Si vous faites cela, vous trouverez probablement vous-même le problème -- et sinon, nous allons être en mesure pour vous aider à mieux.