stack applications qamar rehman. example of stacks infix, postfix and prefix – infix: a+b-c –...

13
Stack Applications Qamar Rehman

Upload: valentine-watkins

Post on 21-Jan-2016

245 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

Stack Applications

Qamar Rehman

Page 2: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

Example of StacksINFIX, POSTFIX and PREFIX

– Infix: A+B-C– Postfix: AB+C-– Prefix: -+ABC

Order of Precedence of Operators– Exponentiation– Multiplication/Division– Addition/Subtraction

Page 3: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

Infix: ( (A+B)*C-(D-E) ) $ (F+G)

Conversion to Postfix Expression

– ( (AB+)*C-(DE-) ) $ (FG+)– ( (AB+C*)-(DE-) ) $ (FG+)– (AB+C*DE--) $ (FG+)– AB+C*DE- -FG+$

Exercise: Convert the following to Postfix– ( A + B ) * ( C – D)– A $ B * C – D + E / F / (G + H)

Page 4: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

Conversion to Prefix ExpressionThe precedence rules for converting an expression from infix to prefix are identical. The only change from postfix is that the operator is placed before the operands rather than after them.

Evaluating a Postfix ExpressionEach operator in a postfix string refers to the previous two operands in the string.

Page 5: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

Algorithm to Evaluate a Postfix Expression

opndstk = the empty stack/* scan the input string reading one element *//* at a time into symb */while (not end of input) {

symb = next input character;

if (symb is an operand) push(opndstk, symb)

else { /* symb is an operator */ op2 = pop(opndstk); op1 = pop(opndstk);

value = result of applying symb to op1 & op2 push(opndstk, value);} /* end else */

} /* end while */return (pop(opndstk));

Example:Postfix Expression: 6 2 3 + - 3 8 2 / + * 2 $ 3 +

symb opnd1 opnd2 value opndstk

6 6

2 6,2

3 6,2,3

+ 2 3 5 6,5

- 6 5 1 1

3 6 5 1 1,3

8 6 5 1 1,3,8

2 6 5 1 1,3,8,2

/ 8 2 4 1,3,4

+ 3 4 7 1,7

* 1 7 7 7

2 1 7 7 7,2

$ 7 2 49 49

3 7 2 49 49,3

+ 49 3 52 52

Page 6: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

Conversion of Infix Expression to postfix

A+B*C = ABC*+(A+B)*C = AB+C*There must be a precedence function.

prcd(op1, op2), where op1 and op2 are characters representing operators. This function returns TRUE if op1 has precedence over op2 when op1 appears to the left

of op2 in an infix expression without parenthesis. prcd(op1,op2) returns FALSE otherwise.

For example prcd(‘*’,’+’) and prcd(‘+’,’+’) are TRUE whereas prcd(‘+’,’*’) is FALSE.

prcd(‘$’,’$’) = FALSE

prcd( ‘(‘ , op) = FALSE for any operator op

prcd( op, ‘(‘ ) = FALSE for any operator op other than ‘)’

prcd( op, ‘)‘ ) = TRUE for any operator op other than ‘(‘

prcd( ‘)‘ ,op ) = undefinedfor any operator op (an error)

Page 7: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

opstk = the empty stack;while (not end of input) { symb = next input character; if (symb is an operand) add symb to the postfix string else { while (!empty(opstk) && prcd(stacktop(opstk),symb) ) {

topsymb = pop(opstk);add topsymb to the postfix string;

} /* end while */

push(opstk, symb); } /* end else */

} /* end while */

/* output any remaining operators */while (!empty(opstk) ) {

topsymb = pop(opstk);add topsymb to the postfix string;

} /* end while */

Example-1: A+B*C

symb Postfix string opstk

A A

+ A +

B AB +

* AB + *

C ABC + *

ABC* +

ABC*+

Algorithm to Convert Infix to Postfix

Page 8: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

Algorithm to Convert Infix to Postfixopstk = the empty stack;while (not end of input) { symb = next input character; if (symb is an operand) add symb to the postfix string else { while (!empty(opstk) && prcd(stacktop(opstk),symb) ) {

topsymb = pop(opstk);add topsymb to the postfix string;

} /* end while */

push(opstk, symb); } /* end else */

} /* end while */

/* output any remaining operators */while (!empty(opstk) ) {

topsymb = pop(opstk);add topsymb to the postfix string;

} /* end while */

Example-2: (A+B)*C

symb Postfix string opstk

( (

A A (

+ A ( +

B AB ( +

) AB+

* AB+ *

C AB+C *

AB+C*

Page 9: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

Algorithm to Convert Infix to Postfixopstk = the empty stack;while (not end of input) { symb = next input character; if (symb is an operand) add symb to the postfix string else { while (!empty(opstk) && prcd(stacktop(opstk),symb) ) {

topsymb = pop(opstk);add topsymb to the postfix string;

} /* end while */

If (empty(opstk) || symb != ‘)’ ) push(opstk, symb);else topsymb = pop(opstk);

} /* end else */

} /* end while *//* output any remaining operators */while (!empty(opstk) ) {

topsymb = pop(opstk);add topsymb to the postfix string;

} /* end while */

Example-2: (A+B)*Csymb Postfix string opstk

( (

A A (

+ A ( +

B AB ( +

) AB+

* AB+ *

C AB+C *

AB+C*

Page 10: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

Algorithm to Convert Infix to Postfixopstk = the empty stack;while (not end of input) { symb = next input character; if (symb is an operand) add symb to the postfix string else { while (!empty(opstk) && prcd(stacktop(opstk),symb) ) {

topsymb = pop(opstk);add topsymb to the postfix string;

} /* end while */

If (empty(opstk) || symb != ‘)’ ) push(opstk, symb);else topsymb = pop(opstk);

} /* end else */

} /* end while *//* output any remaining operators */while (!empty(opstk) ) {

topsymb = pop(opstk);add topsymb to the postfix string;

} /* end while */

Example-3: ( (A-(B+C) ) *D ) $ (E+F)

Page 11: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

Algorithm to Convert Infix to Postfix

opstk = the empty stack;while (not end of input) { symb = next input character; if (symb is an operand) add symb to the postfix string else { while (!empty(opstk) && prcd(stacktop(opstk),symb) ) {

topsymb = pop(opstk);add topsymb to the postfix string;

} /* end while */

If (empty(opstk) || symb != ‘)’ ) push(opstk, symb);else topsymb = pop(opstk);

} /* end else */

} /* end while *//* output any remaining operators */while (!empty(opstk) ) {

topsymb = pop(opstk);add topsymb to the postfix string;

} /* end while */

symb Postfix string opstk

( (

( ((

A A ((

- A ((-

( A ((-(

B AB ((-(

+ AB ((-(+

C ABC ((-(+

) ABC+ ((-

) ABC+- (

* ABC+- (*

D ABC+-D (*

) ABC+-D*

$ ABC+-D* $

( ABC+-D* $(

E ABC+-D*E $(

+ ABC+-D*E $(+

F ABC+-D*EF $(+

) ABC+-D*EF+ $

ABC+-D*EF+$

Example-3: ( (A-(B+C) ) *D ) $ (E+F)

Page 12: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

Algorithm to Convert Infix to Postfixopstk = the empty stack;while (not end of input) { symb = next input character; if (symb is an operand) add symb to the postfix string else { while (!empty(opstk) && prcd(stacktop(opstk),symb) ) {

topsymb = pop(opstk);add topsymb to the postfix string;

} /* end while */

If (empty(opstk) || symb != ‘)’ ) push(opstk, symb);else topsymb = pop(opstk);

} /* end else */

} /* end while *//* output any remaining operators */while (!empty(opstk) ) {

topsymb = pop(opstk);add topsymb to the postfix string;

} /* end while */

Example-4: ( A + B ) * ( C – D)

symb Postfix string opstk

Page 13: Stack Applications Qamar Rehman. Example of Stacks INFIX, POSTFIX and PREFIX – Infix: A+B-C – Postfix: AB+C- – Prefix: -+ABC Order of Precedence of Operators

Assignment # 2

• Develop an expression evaluator that read input from file and perform following operations: – Infix to postfix and prefix– Prefix to infix and Postfix– Postfix to infix and Prefix

Due Date : 28/10/13