×

Data Structure Prefix to Postfix Conversion

Prefix to Postfix Conversion

Prefix: As the name suggests if the operator placed before the operands called the prefix expression.  The form of prefix expression is (operator, operand1, operand2).

Example:  *+EF-GH (Infix: (E+F) * (F-H))

Postfix: In postfix expression, the operator placed after the operands and the form of postfix expression is (operand1, operand2, operator).

Example: EF+GH-* (Infix: (E+F * (G-H))

Algorithm:

  • Firstly, we read input or prefix expression from right to left or we can say in reverse order.
  • If we encounter an operand, then we push it into the stack.
  • If we encounter an operator, then we pop two operands from the stack.
  • Then we are required to make a string which concatenate the two operands and the operator after them.
  • String = operand1 + operand2 + operator
  • Then we push the output or resultant string back to the stack.
  • We need to repeat above steps until the end of prefix expression.

Examples: 

Prefix:  * + E F – G H
Postfix: E F + G H - *
Explanation: Prefix to Infix: (E + F) * (G – H)
             Infix to Postfix:  E F + G H - *
 
Prefix:  * - E / F G - / E K L
Postfix: E F G / - E K / L - *
Explanation: Prefix to Infix: (E - ( F / G ) ) * ( ( E / K ) – L )
    Infix to Postfix :  E F G / - E K / L - * 
 

C- Program to covert prefix expression to postfix expression:

 #include<stdio.h>
 #include<string.h>
 #include<math.h>
 #include<stdlib.h>
 #define BLANK ' '
 #define TAB '\t'
 #define MAX 50
 char *pop();
 char prefix[MAX];
 char stack[MAX][MAX];
 void push(char *str);
 int isempty();
 int white_space(char element);
 void prefix_to_postfix();
 int top;
 int main()
 {
         top  =  -1;
         printf(" Enter Prefix Expression :  ");
         gets(prefix);
         prefix_to_postfix();
 }
 /* End of main() */
 void prefix_to_postfix()
 {
         int i;
         char operand1[MAX], operand2[MAX];
         char element;
         char temp[2];
         char strin[MAX];
         for(i = strlen(prefix)-1; i >= 0; i--)
         {
                 element = prefix[i];
                 temp[0] = element;
                 temp[1] = '\0';
                 if(!white_space(element))
                 {
                         switch(element)
                         {
                         case '+':
                         case '-':
                         case '*':
                         case '/':
                         case '%':
                         case '^':
                                 strcpy(operand1,pop());
                                 strcpy(operand2,pop());
                                 strcpy(strin,operand1);
                                 strcat(strin,operand2);
                                 strcat(strin,temp);            
                                 push(strin);
                                 break;
                         default:
 /* if an operand comes */
                              push(temp);
                         }
                 }
         }
         printf("\nPostfix Expression :: ");
         puts(stack[0]);
 }
 /* End of prefix_to_postfix()  */
 void push(char *str)
 {
         if(top  >  MAX)
         {
                 printf("\nStack overflow\n");
                 exit(1);
         }
         else
         {
                 top = top+1;
                 strcpy( stack[top], str);
         }
 }
 /* End of push() */
 char *pop()
 {
         if(top  ==  -1 )
         {
                 printf("\n Stack underflow \n");
                 exit(2);
         }
         else
                 return (stack[top--]);
 }
 /*  End of pop()  */
 int isempty()
 {
         if(top==-1)
                 return 1;
         else
                 return 0;
 }
 int white_space(char element)
 {
         if(element == BLANK || element == TAB || element == '\0')
                 return 1;
         else
                 return 0;
 } 

Output: -

Time Complexity:  -  

The time complexity to convert prefix expression to postfix expression is O(n) and space complexity is also O(n).


Related Topics

Convert Binary Tree into a Threaded Binary Tree

Implementation /*Writing a C++ program that will help us change the binary tree into a threaded binary tree and help us transform. */ #include <bits/stdc++.h> using namespace std; /*Creating the structure of a node...

11 minutes read.

Find Number of Minimum Insertion to Make a String Palindrome

You have been given a string. You have to find out the number of minimum insertions to make this string palindrome. The string will contain only lower case alphabets. Note:What is...

4 minutes read.

B+ Tree Program in Q language

A B+ tree is just an improvised version of a self-balancing and well-maintained tree in which all the key values that hold valuable information is present at the bottom, which...

9 minutes read.

Difference between complete and full binary tree

As we all know that the  binary tree is a tree it contains one or two children at each other node. It contains two children's nodes in the Binary tree. The...

6 minutes read.

Given a Binary Tree, Print the Pre-order Traversal in Recursive

Implementation #include <stdio.h> #include <stdlib.h>   /* Creating a binary tree node that consists of some data along with the pointer to the left and right child.  */ struct __nod {     int record;     struct...

4 minutes read.

Boruvkas algorithm

This algorithm is used for finding minimum spanning tree from a weighted graph. Like prim’s and kruskal’s algorithm it is also a greedy algorithm. Note:What is the minimum spanning tree?We know...

4 minutes read.

What is a Threaded Binary Tree?

When we consider those binary trees that are interlinked with each other, we do come across the fact that the fields present in there do consist of NULL values that...

3 minutes read.

Segregate Even and Odd nodes in a Linked List

Segregate even and odd nodes in a Linked List In this problem, we have given a linked list with integer numbers. We need to modify the given linked list in such...

4 minutes read.

Difference between Stack and Queue

In this article, we will learn about the major differences between Stack and Queue data structures. What is a stack? Stack – A stack is an abstract data structure defined as the...

3 minutes read.

Introduction to 1D-Arrays

One Dimensional Array Technical Definitions The simplest version of an Array is a One-Dimensional Array, in which the items are stored linearly and may be accessed individually by supplying the index value...

6 minutes read.

Time Complexity of Selection Sort in Data Structure

What is Time Complexity? The term “Time complexity” can be defined as the number of times executions made of a particular sequence of instructions and not the total amount of time...

3 minutes read.

What is a Sparse Matrix in Data Structure?

Definition A matrix in which a few non-zero elements are present is called a Sparse matrix. In a Sparse matrix, almost all the matrices are filled with zero (0). A matrix...

5 minutes read.

Remove duplicates from an unsorted Linked List

Remove duplicates from an unsorted Linked List This article will explain how we can remove duplicates from unsorted linked lists. Here we have given an unsorted singly linked list and will...

3 minutes read.

Strings in Data Structures

Strings and functions in C A string is a collection of characters. We'll learn how to declare strings, operate with strings in C programming, and use pre-defined string handling routines. We'll look...

7 minutes read.

Rotate a Singly Linked List

Rotate a Singly Linked List This article will explain how we can rotate the singly linked list. Here we have given a singly linked list, and we need to rotate this...

4 minutes read.

Stack Using Linked List

In the linked list implementation of the stack, we use a linked list as the primitive data structure to create the stack. It is called the dynamic implementation of the...

6 minutes read.

Compare Balanced Binary Tree and Complete Binary Tree

Complete and balanced binary trees are important and general topics in the concept – Tree data structure. Before discussing the complete and balanced binary tree, we need to have an...

8 minutes read.

Properties of Binary Tree

Trees are maybe of the most significant datum structures. They are used to store and figure out data. A binarytree is a tree data structure made from nodes, all of which has...

3 minutes read.

Burning binary tree

Burn the Binary tree starting from the target node You have given a binary tree and a target node value. Now you have to burn the tree from target node. You...

4 minutes read.

Introduction to Arrays

What exactly is an array? A group of related data pieces stored in contiguous memory regions is referred to as an array. It is the most basic data structure in which...

5 minutes read.