接尾辞式の式ツリーを構築するC++プログラム
式ツリーは基本的に、式を表すために使用される二分木です。式ツリーでは、ノードは演算子に対応し、各リーフノードはオペランドに対応します。これは、インオーダー、プレオーダー、およびポストオーダートラバーサルで後置式の式ツリーを構築するためのC++プログラムです。
アルゴリズム
Begin Function r() has a character variable as parameter. If the characters are + or - or * or / then Return will be -1 If the characters are from A to Z then Return will be 1. If the characters are from a to z then Return will be 1. Else Return -100. Function construct_expression_tree() to construct the expression tree Function push() to push values in the stack Function pop() to pop values from the stack Function preOrder() for pre-order traversal Function inOrder() for in-order traversal Function postOrder() for post-order traversal End.
サンプルコード
#include <iostream> using namespace std; struct n { char d; n *l; n *r; }; char pf[50]; int top = -1; n *a[50]; int r(char inputch) { if (inputch == '+' || inputch == '-' || inputch == '*' || inputch== '/') return (-1); else if (inputch >= 'A' || inputch <= 'Z') return (1); else if (inputch >= 'a' || inputch <= 'z') return (1); else return (-100); } void push(n *tree) { top++; a[top] = tree; } n *pop() { top--; return (a[top + 1]); } void construct_expression_tree(char *suffix) { char s; n *newl, *p1, *p2; int flag; s = suffix[0]; for (int i = 1; s != 0; i++) { flag = r(s); if (flag == 1) { newl = new n; newl->d = s; newl->l = NULL; newl->r = NULL; push(newl); } else { p1 = pop(); p2 = pop(); newl = new n; newl->d = s; newl->l = p2; newl->r = p1; push(newl); } s = suffix[i]; } } void preOrder(n *tree) { if (tree != NULL) { cout << tree->d; preOrder(tree->l); preOrder(tree->r); } } void inOrder(n *tree) { if (tree != NULL) { inOrder(tree->l); cout << tree->d; inOrder(tree->r); } } void postOrder(n *tree) { if (tree != NULL) { postOrder(tree->l); postOrder(tree->r); cout << tree->d; } } int main(int argc, char **argv) { cout << "Enter Postfix Expression : "; cin >> pf; construct_expression_tree(pf); cout << "\nIn-Order Traversal : "; inOrder(a[0]); cout << "\nPre-Order Traversal : "; preOrder(a[0]); cout << "\nPost-Order Traversal : "; postOrder(a[0]); return 0; }
出力
Enter Postfix Expression : 762*+6+ In-Order Traversal : 7+6*2+6 Pre-Order Traversal : ++7*626 Post-Order Traversal : 762*+6+
-
QuickSort用のC++プログラム?
クイックソートは、比較を使用してソートされていないリスト(配列)をソートするソート手法です。クイックソートは、パーティション交換ソートとも呼ばれます。 等しいソート項目の相対的な順序が保持されないため、安定したソートではありません。クイックソートは配列を操作できるため、ソートを実行するために少量の追加メモリが必要です。常に最悪の場合のパーティションを選択するわけではないことを除いて、選択ソートと非常によく似ています。したがって、選択ソートのより適切な形式と見なすことができます。 QuickSortは、最も効率的な並べ替えアルゴリズムの1つであり、配列を小さい配列に分割することに基づいていま
-
特定の式の式ツリーを構築するPythonプログラム
式ツリーは、リーフノードが操作される値を持ち、内部ノードがリーフノードが実行される演算子を含むツリーです。 例:4 +((7 + 9)* 2) -のような式ツリーがあります この問題を解決するためのアプローチ 特定の式の式ツリーを構築するために、通常、スタックデータ構造を使用します。最初に、指定された接尾辞式を繰り返し処理し、以下の手順に従います- 指定された式でオペランドを取得した場合は、それをスタックにプッシュします。これは、式ツリーのルートになります。 演算子が式で2つの値を取得した場合は、式ツリーにその子として追加し、それらを現在のノードにプッシュします。 指定された式が完