0% found this document useful (0 votes)
1K views23 pages

The Polish Notation (Application of Stacks)

The document discusses Polish notation, an alternative way of writing arithmetic expressions without using parentheses. It describes how Polish notation avoids operator precedence by placing operators before or after operands. The key points are: - Polish notation can be evaluated efficiently using a stack data structure. - Expressions can be converted between infix, prefix and postfix forms using stack-based algorithms. - Postfix expressions are evaluated by pushing operands onto a stack and popping to apply operators.

Uploaded by

Ritik
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views23 pages

The Polish Notation (Application of Stacks)

The document discusses Polish notation, an alternative way of writing arithmetic expressions without using parentheses. It describes how Polish notation avoids operator precedence by placing operators before or after operands. The key points are: - Polish notation can be evaluated efficiently using a stack data structure. - Expressions can be converted between infix, prefix and postfix forms using stack-based algorithms. - Postfix expressions are evaluated by pushing operands onto a stack and popping to apply operators.

Uploaded by

Ritik
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 23

The Polish Notation

(Application of Stacks)
Polish Notation

 Polish Notation is a way of expressing


arithmetic expressions that avoids the use
of brackets to define priorities for evaluation
of operators.
 Evaluation can be achieved with great
efficiency
Operation priorities

Binary operators Unary operators


1. * / %  -5
2. + –  +5
3. < <= > >=  + –5 = – 5
4. == !=  – –5 = 5
5. &&
6. ||
7. =
Polish Notation
 Discovered by the polish mathematician
Jan Lukasiewicz.
 Operators are either before or after their
operands:
before  prefix
after  postfix
Note:
between  infix
Examples
ab
prefix   a b
postfix  a b 
infix  a  b
Note:
a+bc Prefix and Postfix are not
mirror to each other
prefix  +abc
postfix  abc+
Converting Infix to Postfix with Stack
 Read expression from Left-to-Right and
 if an operand is read copy it to the output,
 if a left parenthesis is read push it into the stack,
 when a right parenthesis is encountered, the operator at the top of
the stack is popped off the stack and copied to the output until the
symbol at the top of the stack is a left parenthesis. When that occurs,
both parentheses are discarded,
 if an operator is scanned and has a higher precedence than the
operator at the top of the stack, the operator being scanned is
pushed onto the stack,
 while the precedence of the operator being scanned is lower than or
equal to the precedence of the operator at the top of the stack, the
operator at the top of the stack is popped and copied to the output,
 when the end of the expression is reached on the input scan, the
remaining operators in the stack are popped and copied to the
output.
Example

Input: 4 * (2 – (6 * 3 + 4) * 2) + 1
Output: 4 2 6 3 * 4 + 2 * – * 1 +

* +
( ( *
– – –
( ( (
+
* * * *
Converting Infix to Prefix with Stack
 Read expression from Right-to-Left and
 if an operand is read copy it to the LEFT of the output,
 if a right parenthesis is read push it into the stack,
 when a left parenthesis is encountered, the operator at the top of the
stack is popped off the stack and copied to the LEFT of the output
until the symbol at the top of the stack is a right parenthesis. When
that occurs, both parentheses are discarded,
 if an operator is scanned and has a higher or equal precedence than
the operator at the top of the stack, the operator being scanned is
pushed onto the stack,
 while the precedence of the operator being scanned is lower than to
the precedence of the operator at the top of the stack, the operator at
the top of the stack is popped and copied to the LEFT of the output,
 when the end of the expression is reached on the input scan, the
remaining operators in the stack are popped and copied to the LEFT of
the output.
Example

Input: 4 * (2 – (6 * 3 + 4) * 2) + 1
Output: + * 4 – 2 * + * 6 3 4 2 1

*
+
)
* * –
) ) ) *
+ + + +
Converting Infix to Prefix with Stack
2nd method
 Reverse the expression
 Read expression from Left-to-Right and
 if an operand is read copy it to the output (left-to-right),
 if a right parenthesis is read push it into the stack,
 when a left parenthesis is encountered, the operator at the top of the
stack is popped off the stack and copied to the output until the
symbol at the top of the stack is a right parenthesis. When that
occurs, both parentheses are discarded,
 if an operator is scanned and has a higher or equal precedence than
the operator at the top of the stack, the operator being scanned is
pushed onto the stack,
 while the precedence of the operator being scanned is lower than to
the precedence of the operator at the top of the stack, the operator at
the top of the stack is popped and copied to the output,
 when the end of the expression is reached on the input scan, the
remaining operators in the stack are popped and copied to the output.
 Reverse the output
Example
Input: 4 * (2 – (6 * 3 + 4) * 2) + 1

Reverse: 1 + ) 2 * ) 4 + 3 * 6 ( – 2 ( * 4

Output: 1 2 4 3 6 * + * 2 – 4 * +

*
+
)
* * –
) ) ) *
+ + + +

Reverse Output: + * 4 – 2 * + * 6 3 4 2 1
Exercises
 Using stack diagrams convert the following
expressions into postfix and prefix forms of
polish notation:

a) 8 – 3  4 + 2
b) 8 – 3  (4 + 2)
c) (8 – 3)  (4 + 2)
d) (8 – 3)  4 + 2
e) (-a + b)  (c + a) – 5
f) 2 + ((-3 + 1)  (4 – 2) + 3)  6 – (1 + 2  3)
 Write programs using stack for following
 To convert given infix to postfix
 To convert given infix to prefix
C CODE (INFIX TO POSTFIX)
#include<stdio.h>
#include<stdlib.h>
#define STACKSIZE 20

typedef struct{
int top;
char items[STACKSIZE];
}STACK;

void push(STACK *, char);


char pop(STACK *);
int preced(char);
void main()
{
int i;
char x,y, E[20] ;
STACK s;
s.top = -1;
printf("Enter the Infix Expression:");
scanf("%s",E);
for(i=0;E[i] != '\0';i++)
{
x= E[i];
if(x<=‘z’&& x>=‘a’) /* Consider all lowercase letter operands from a to z */
printf(“%c”, x);
else if(x == ‘(‘)
push(&s ,x);
else if(x == ‘)’)
{ y=pop(&s) ;
while(y != ‘(‘){
printf(“%c”,y);
y=pop(&s) ;
}
}
else
{
if(s.top ==-1 || s.items[s.top] == ‘(‘)
push(&s ,x);
else {
if (x == '/' || x == '*' || x == '+' || x == '-')
{
if (preced(x) > preced(s.items[s.top]))
push(&s ,x);
else
{
while (preced(x) <= preced(s.items[s.top]))
{
printf(“%c”, pop(&s));
}
push(&s ,x);
}
}
}}}
while(s.top != -1)
printf(“%c”,pop(&s));
}
void push(STACK *sptr, char ps) /*pushes ps into stack*/
{
if(sptr->top == STACKSIZE-1){
printf("Stack is full\n");
exit(1); /*exit from the function*/
}
else
sptr->items[++sptr->top]= ps;
}
char pop(STACK *sptr)
{
if(sptr->top == -1){
exit(1); /*exit from the function*/
}
else
return sptr->items[sptr->top--];
}
int preced(char ch)
{
if(ch == '(' || ch == ')')
return 0;
else if (ch == '+' || ch == '-')
return 1;
else if (ch== '/' || ch == '*')
return 2;
}
Evaluation of Reverse Polish
Expressions
 Most compilers use the polish form to translate
expressions into machine language.

 Evaluation is done using a stack data-structure


 Reverse Polish Notation also called as suffix notation
 Read expression from left to right and build the stack of
numbers (operands).
 When an operator is read two operands are popped out
of the stack they are evaluated with the operator and the
result is pushed into the stack.
 At the end of the expression there must be only one
operand into the stack (the solution) otherwise ERROR.
3 4 6 2  + 8 3 – 2 5 –  4 +  + 2 6  –
62 4 + 12 8–3 5 2–5
2 3 2
6 12 8 5
4 4 16 16
3 3 3 3

5  (-3) -15 + 4 16  (-11)


-3 4
5 -15 -11
16 16 16
3 3 3

3 + (-176) 26 -173 – 12

6
-176 2 12
3 -173 -173 Result = -185
Evaluation of Polish Expressions
 Evaluation is done using a stack data-structure
 Polish Notation also called as prefix notation
 Read expression from right to left and build the stack of
numbers (operands).
 When an operator is read two operands are popped
out of the stack they are evaluated with the operator
and the result is pushed into the stack.
 At the end of the expression there must be only one
operand into the stack (the solution) otherwise ERROR.
–  3 – 8  3 2 – ~ 4 – 6 2

6–2 -4 -4 – 4 32

3
6 4 -4 2
2 4 4 -8

8–6 32 6 – (-8)

8 3
6 2 6
-8 -8 -8 Result = 14
Translate each of the following expressions from
infix form into postfix and then by using stack
diagrams evaluate the postfix expressions:
a) 5 * ((-3 – 2) * (4 – 6) + 3 * 2)
b) -3 + (5 + 2) * 8 + 6 – ((4 – 2 * 3) * (-2 – 3) – 9)
c) 9 + 5 * ((3 + 2) – 8 * (1 – 3) * (-3 – 6)) + 2 * 3
d) 1 – (3 – (-1 + 2 * (6 + 7 * 2)))

You might also like