250 likes | 481 Views
CS2006 - Data Structures I. Chapter 7 Stacks III. Topics. Applications Infix to postfix expression Evaluate postfix expression. Infix Expressions. Binary operators appear between operands: W - X / Y – Z (4+3)*2 (2+3)/(9-4) Order of evaluation is determined by:
E N D
CS2006 - Data Structures I Chapter 7StacksIII
Topics • Applications • Infix to postfix expression • Evaluate postfix expression
Infix Expressions • Binary operators appear between operands: W - X / Y – Z (4+3)*2 (2+3)/(9-4) • Order of evaluation is determined by: • precedence rules • parentheses • association (L to R or R to L)
Application: Algebraic Expressions • Infix Expression Evaluation • To evaluate an infix expression • Convert the infix expression into postfix • Evaluate the postfix expression using stacks
Postfix Expressions • Binary operators appear after both operands: • X + Y in postfix form is: X Y + • Order of operations is completely determined by the expression • no parentheses or precedence required • for example: • A * B - C becomes A B * C -
Postfix Expression Infix Postfix 6-1 (4+3)*2 (2+3)/(9-4)
Postfix Expression Evaluation • Assumptions: • The string is syntactically correct postfix expression • No unary operators are present • No exponentiation operators are present
Postfix Expression Evaluation • Evaluation of postfix expressions makes use of an operand stack. • Algorithm: • Parse expression from left to right • When an operand is encountered, push it onto stack • when an operator is encountered, pop the last two operands off the stack and apply the operation, and push the result onto the stack • when the expression is completely scanned, the final result will be on the stack 2 3 + 9 4 -
Postfix Expression Evaluation • Pseudocode: for ( each character ch in the string ) { if (ch is an operand ) Push value that operand ch represents onto stack else / / ch is an operator named op { / / evaluate and push the result operand2 = top of stack Pop the stack operand1 = top of stack Pop the stack result = operand1 op operand2 Push Result onto stack } / / end if } / / end for
Example • Evaluate 2 3 4 5 + 2 * 1 + + 3 2 * + *
Converting Infix into Postfix • Since postfix expressions are easily evaluated, the easiest way to evaluate infix is to convert from infix to postfix and then evaluate. • This conversion uses an operator stack since low precedence operators must be saved and applied after high precedence ones.
Converting Infix into Postfix • The operands always stay in the same order with respect to one another • An operator will move only to “ the right” with respect to the operands • If in infix expression, the operand x precedes the operator op, in the postfix, the operand x also precedes the operator x • All parentheses are removed
Converting Infix into Postfix • Converting Infix into Postfix • Scan infix string from left to right • Each time an operand is encountered, copy it to output • When a bracket is encountered, check its orientation. • Push left brackets onto stack • If it is a right bracket, pop all operators on the stack and copy them to output until a matching left bracket is encountered. Discard the left bracket
Converting Infix into Postfix • Converting Infix into Postfix • When an operator is encountered, check the top item of the stack • If the priority is >= the current operator, pop the top operator and copy it to output • Continue until an operator of lower priority is encountered or until the stack is empty • Finally, push current operator onto the stack • When the end of the expression is reached, copy the remaining stack contents to output in the order popped
Converting Infix into Postfix • Converting Infix into Postfix • Precedence Table
Conversion Example • W - X /Y + Z • '-' is pushed onto operator stack • '/' has higher precedence than '-' on stack - it gets pushed • '+' has lower precedence than '/' on stack - pop '/' and output - then '-' is on top of stack - since subtraction associates left to right - pop '-' off stack and output - push '+' onto stack • when end of expression is reached pop remaining operator and output • resulting expression is: W X Y /- Z +
Converting Infix into Postfix stack.push(EOL marker) for (each character ch in the infix expression) { switch (ch) { case operand: //append ch to output postfix expression postfixExpr = postfixExpr + ch; case '(': stack.push(ch); // push ch onto operator stack case ')': while (top of stack is not '(' ) { postfixExpr = postfixExpr + stack.pop(); // pop and append expr. } stack.pop(); case operator: while (!stack.isEmpty() && inputPrec(ch) <= stackPrec(stack.top())) { postfixExpr = postfixExpr + stack.pop(); } stack.push(ch); } // end for while (!stack.isEmpty() { // pop all remaining operators off stack and append postfixExpr = postfixExpr + stack.pop(); }
Conversion Example • 2 + 3 * [(7-5)/2] 2 3 7 5 • 2 copy into output • ‘+' is pushed onto operator stack • 3 copy into output • ‘*' has higher precedence than ‘+' on stack - it gets pushed • ‘[‘ is left bracket, push it onto stack • ‘(‘is left bracket, push it onto stack • 7 is copied into output • ‘-' has higher precedence than ‘(‘, push onto stack
Conversion Example • 2 + 3 * [(7-5)/2]
Prefix Expressions Infix Prefix 6-1 - 6 1 (4+3)*2 * + 4 3 2 (2+3)/(9-4) / + 2 3 – 9 4
Review • Which of the following is NOT true about converting infix expressions to postfix expressions? • the operands always stay in the same order with respect to one another • the operators always stay in the same order with respect to one another • an operator will move only “to the right” with respect to the operands • all parentheses are removed
Review • Which of the following is the postfix form of the infix expression: (a + b) * c / d • a b + c * d / • a b * c / d + • a + b * c / d • a b + c d * /
Review • StackInterface provides the specifications for ______. • only the array-based implementation of a stack • only the reference-based implementation of a stack • only an implementation of a stack that uses the ADT list • all the implementations of a stack
Review • In the StackInterface class, the push method accepts as its parameter an item that is an instance of ______. • Integer • Double • String • Object