Maison > développement back-end > C++ > le corps du texte

Comment utiliser l'algorithme Shunting-yard pour convertir une chaîne d'expression mathématique en une arborescence en C ?

Mary-Kate Olsen
Libérer: 2024-10-30 08:37:27
original
134 Les gens l'ont consulté

How can the Shunting-yard algorithm be used to convert a mathematical expression string into a tree structure in C  ?

Analyse d'expressions mathématiques en C à l'aide de l'algorithme Shunting-yard

Dans le domaine de la programmation, l'expression de calculs mathématiques complexes dans du code nécessite souvent une analyse chaînes de texte dans une représentation arborescente interne. Cela facilite l'évaluation et la manipulation ultérieures de ces expressions.

Considérons la tâche d'analyser la chaîne d'expression mathématique suivante : "(a b)c-(d-e)f/g". L'objectif est de construire une structure arborescente utilisant des classes C pour représenter cette expression.

Utilisation de l'algorithme Shunting-yard

L'algorithme Shunting-yard fournit une stratégie efficace pour analyser des expressions mathématiques en arbres. Cet algorithme fonctionne en deux phases :

  1. Tokeniser l'expression : Divisez la chaîne en ses jetons individuels, y compris les opérandes (par exemple, "a", "b"), les opérateurs ( par exemple, " ", "-") et des parenthèses.
  2. Construisez l'arborescence : Utilisez deux piles : une pile d'opérateurs et une pile de sortie. Traitez les jetons un par un :

    • Si le jeton est un opérande, placez-le sur la pile de sortie.
    • Si le jeton est un opérateur, extrayez les opérateurs de la pile d'opérateurs. jusqu'à ce que vous rencontriez un opérateur de priorité inférieure ou une parenthèse ouverte. Poussez l'opérateur actuel sur la pile d'opérateurs.
    • Si le jeton est une parenthèse ouverte, poussez-le sur la pile d'opérateurs.
    • Si le jeton est une parenthèse fermée, faites apparaître les opérateurs de la pile d'opérateurs. jusqu'à ce que vous rencontriez la parenthèse ouverte correspondante. Poussez la sous-expression résultante sur la pile de sortie.

Définition de la structure arborescente

Pour représenter la structure arborescente, définissez le C suivant classes :

  • Exp (classe de base)
  • Terme (héritant de Exp) pour les opérandes
  • Nœud (héritant de Exp) pour les opérateurs

Exemple de processus d'analyse

Pour l'expression "(a b)c-(d-e)f/g", le processus d'analyse se déroulerait comme suit :

Operator Stack | Output Stack
--------------|--------------
               | a b
+             | a b +
               | a b + c
*             | a b + c *
               | a b + c * d
-             | a b + c * d -
               | a b + c * d - e
               | a b + c * (d - e)
*             | a b + c * (d - e) f
               | a b + c * (d - e) f /
               | (a + b) * c - (d - e) * f / g
Copier après la connexion

L'arborescence résultante aurait la forme suivante :

            *
            / \
       (a + b) * (d - e)
            / \
           /   \
          c     / \
               f / g
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!