From 0625862bbe63ee4d957240b97c40445caa2632c4 Mon Sep 17 00:00:00 2001 From: Arnav Jagia Date: Sun, 15 Oct 2023 04:20:53 +0530 Subject: [PATCH 1/3] Added postfix-prefix conversion --- DIRECTORY.md | 1 + .../stacks/postfix_to_prefix_conversion.py | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 data_structures/stacks/postfix_to_prefix_conversion.py diff --git a/DIRECTORY.md b/DIRECTORY.md index 2c6000c94ed4..ea2bd06b29c6 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -257,6 +257,7 @@ * [Dijkstras Two Stack Algorithm](data_structures/stacks/dijkstras_two_stack_algorithm.py) * [Infix To Postfix Conversion](data_structures/stacks/infix_to_postfix_conversion.py) * [Infix To Prefix Conversion](data_structures/stacks/infix_to_prefix_conversion.py) + * [Postfix to Prefix Conversion](data_structures/stacks/postfix_to_prefix_conversion.py) * [Next Greater Element](data_structures/stacks/next_greater_element.py) * [Postfix Evaluation](data_structures/stacks/postfix_evaluation.py) * [Prefix Evaluation](data_structures/stacks/prefix_evaluation.py) diff --git a/data_structures/stacks/postfix_to_prefix_conversion.py b/data_structures/stacks/postfix_to_prefix_conversion.py new file mode 100644 index 000000000000..4bd848f290d9 --- /dev/null +++ b/data_structures/stacks/postfix_to_prefix_conversion.py @@ -0,0 +1,49 @@ +""" +Functions: +- postfix_to_prefix(expression): Converts a postfix expression to a prefix expression. +""" + +from .stack import Stack + + +def postfix_to_prefix(expression_str: str) -> str: + """ + Converts a postfix expression to a prefix expression. + + Args: + expression (str): A string representing a postfix expression. + + Returns: + str: A string representing the equivalent prefix expression. + + Raises: + IndexError: If the expression is invalid or contains an invalid operator. + + Example: + >>> postfix_to_prefix('23+5*') + '*+235' + """ + stack: Stack[str] = Stack() + operators = {"+", "-", "*", "/", "^"} + + for char in expression_str: + if char not in operators: + stack.push(char) + else: + operand1 = stack.pop() + operand2 = stack.pop() + stack.push(char + operand2 + operand1) + + return stack.pop() + + +if __name__ == "__main__": + from doctest import testmod + + testmod() + postfix_expression = "ab+c*" + + print("Postfix to infix demo\n") + print("Postfix expression:", postfix_expression) + prefix_expression = postfix_to_prefix(postfix_expression) + print("Prefix expression:", prefix_expression) \ No newline at end of file From edc7fae8959ad192233a12a72f6f0ba364b3745f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 14 Oct 2023 22:53:46 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- data_structures/stacks/postfix_to_prefix_conversion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_structures/stacks/postfix_to_prefix_conversion.py b/data_structures/stacks/postfix_to_prefix_conversion.py index 4bd848f290d9..16f6f26e6b36 100644 --- a/data_structures/stacks/postfix_to_prefix_conversion.py +++ b/data_structures/stacks/postfix_to_prefix_conversion.py @@ -46,4 +46,4 @@ def postfix_to_prefix(expression_str: str) -> str: print("Postfix to infix demo\n") print("Postfix expression:", postfix_expression) prefix_expression = postfix_to_prefix(postfix_expression) - print("Prefix expression:", prefix_expression) \ No newline at end of file + print("Prefix expression:", prefix_expression) From a1c90c39bae2d2bd38982542178349f8d42d2f73 Mon Sep 17 00:00:00 2001 From: cclauss Date: Fri, 11 Sep 2026 06:18:11 +0000 Subject: [PATCH 3/3] updating DIRECTORY.md --- DIRECTORY.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index e1fc9f5de146..af8b9a34f497 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -345,12 +345,12 @@ * [Dijkstras Two Stack Algorithm](data_structures/stacks/dijkstras_two_stack_algorithm.py) * [Infix To Postfix Conversion](data_structures/stacks/infix_to_postfix_conversion.py) * [Infix To Prefix Conversion](data_structures/stacks/infix_to_prefix_conversion.py) - * [Postfix to Prefix Conversion](data_structures/stacks/postfix_to_prefix_conversion.py) * [Kth Next Greater Element](data_structures/stacks/kth_next_greater_element.py) * [Largest Rectangle Histogram](data_structures/stacks/largest_rectangle_histogram.py) * [Lexicographical Numbers](data_structures/stacks/lexicographical_numbers.py) * [Next Greater Element](data_structures/stacks/next_greater_element.py) * [Postfix Evaluation](data_structures/stacks/postfix_evaluation.py) + * [Postfix To Prefix Conversion](data_structures/stacks/postfix_to_prefix_conversion.py) * [Prefix Evaluation](data_structures/stacks/prefix_evaluation.py) * [Stack](data_structures/stacks/stack.py) * [Stack Using Two Queues](data_structures/stacks/stack_using_two_queues.py) @@ -987,6 +987,7 @@ * [Doppler Frequency](physics/doppler_frequency.py) * [Escape Velocity](physics/escape_velocity.py) * [Grahams Law](physics/grahams_law.py) + * [Hamiltonian](physics/hamiltonian.py) * [Horizontal Projectile Motion](physics/horizontal_projectile_motion.py) * [Hubble Parameter](physics/hubble_parameter.py) * [Ideal Gas Law](physics/ideal_gas_law.py)