Ich versuche, eine Anwendung, die in einer Algebra-Gleichung eingespeist wird und löst für eine bestimmte Variable der Benutzer zu wählen.Datenstruktur für eine Algebra-Gleichung?
Pseudocode unten
enum Variable
x, pi, y, z; //.. etc
class Value
double constant;
Variable var;
class Term
Value val; // Might be a variable or a constant
Expression exponent; // The exponent of this term
boolean sign; // Negative flag
class Expression
LinkedList<Term>; // All the terms in this expression
^ This is what I need help on.
Expression exponent; // The exponent of this term
Zum Beispiel der durchschnittliche Gleichung könnte sein:
y = x + (x - 5)^z
^term ^term ^operator ^expression^term
Ich brauche diese Informationen in irgendeiner Art von Datenstruktur zu speichern, jedoch um durch sie zu analysieren. Wie Sie oben sehen, wenn ich LinkedList<Term>
schrieb, funktioniert es, aber es gibt keine Möglichkeit für mich, Operatoren zu implementieren.
das obige Beispiel verwenden, das ist, wie ich meine Datenstruktur aussehen soll:
// Left side of the equals sign
{ NULL <-> y <-> NULL }
// Right side of the equals sign
{ NULL <-> x <-> Operator.ADD <-> Expression: (x - 5) <-> NULL }
ich dies aber nicht tun können, weil LinkedList
Bedürfnisse eines Datentyps sein, was sein muss Ausdruck. Wie sollte ich Operatoren darstellen?
Kann ich als Unterklasse des Begriffs vorschlagen? was, als eine Beziehung, notwendigerweise die Beschränkung halten, um ein vorheriges und ein nächstes Element zu haben? – Flint
Ich habe ein bisschen Schwierigkeiten zu verstehen, was du meinst? Meinst du, dass meine Term-Klasse zwei Felder (rechts und links) hat, um sie darüber zu informieren, welcher Operator sich links oder rechts davon befindet? – Hatefiend
In Ihrem Beispiel sind Begriffe in einer verknüpften Liste. Schließlich enthalten Elemente einer verknüpften Liste Verweise auf die vorherigen und nächsten Elemente dieser Liste. Sagen wir, Operatoren sind Ausdrücke (Unterklassen) mit einer zusätzlichen Regel: Sie haben auf beiden Seiten wörtliche Ausdrücke oder Ausdrücke. Vergesse jetzt, was ich gesagt habe, folge den Vorschlaegtypdef-Ratschlägen und verwende stattdessen einen abstrakten Syntaxbaum: Blätter und Knoten tragen diese Eigenschaften natürlich. – Flint