Stacks21 Stacks II Adventures in Notation. stacks22 The trouble with infix... Rules for expression evaluation seem simple -- evaluate expression left.

Slides:



Advertisements
Similar presentations
INFIX, PREFIX, & POSTFIX EXPRESSIONS. Infix Notation We usually write algebraic expressions like this: a + b This is called infix notation, because the.
Advertisements

Stacks & Their Applications COP Stacks  A stack is a data structure that stores information arranged like a stack.  We have seen stacks before.
Stacks Chapter 11.
Stacks - 3 Nour El-Kadri CSI Evaluating arithmetic expressions Stack-based algorithms are used for syntactical analysis (parsing). For example.
Prefix, Postfix, Infix Notation
Computer Science 112 Fundamentals of Programming II Applications of Stacks.
Arithmetic Expressions Infix form –operand operator operand 2+3 or a+b –Need precedence rules –May use parentheses 4*(3+5) or a*(b+c)
COSC 2006 Chapter 7 Stacks III
C o n f i d e n t i a l Developed By Nitendra NextHome Subject Name: Data Structure Using C Title : Overview of Stack.
Stacks21 Stacks II Adventures in Notation. stacks22 The trouble with infix... Rules for expression evaluation seem simple -- evaluate expression left.
Arithmetic Expressions
Topic 15 Implementing and Using Stacks
Department of Technical Education Andhra Pradesh
Stacks.
Stacks & Queues Infix Calculator CSC 172 SPRING 2002 LECTURE 5.
Infix to postfix conversion Process the tokens from a vector infixVect of tokens (strings) of an infix expression one by one When the token is an operand.
Stacks & Queues Infix Calculator CSC 172 SPRING 2004 LECTURE 13.
Infix, Postfix, Prefix.
Fall 2007CS 2251 Stacks Chapter 5. Fall 2007CS 2252 Chapter Objectives To learn about the stack data type and how to use its four methods: push, pop,
Postfix notation. About postfix notation Postfix, or Reverse Polish Notation (RPN) is an alternative to the way we usually write arithmetic expressions.
Fall 2007CS 2251 Stacks Chapter 5. Fall 2007CS 2252 Chapter Objectives To learn about the stack data type and how to use its four methods: push, pop,
1 CSCD 326 Data Structures I Infix Expressions. 2 Infix Expressions Binary operators appear between operands: W - X / Y - Z Order of evaluation is determined.
Topic 15 Implementing and Using Stacks
Evaluation of Expressions
The Stack and Queue Types Lecture 10 Hartmut Kaiser
Data Structures Lecture : Stacks (Infix, Postfix and Prefix Expressions) Azhar Maqsood NUST Institute of Information Technology (NIIT)
Stack Applications.
CSC 205 Programming II Postfix Expressions. Recap: Stack Stack features Orderly linear structure Access from one side only – top item Stack operations.
Computer Science Department Data Structure & Algorithms Problem Solving with Stack.
SAK 3117 Data Structures Chapter 3: STACKS. Objective To introduce: Stack concepts Stack operations Stack applications CONTENT 3.1 Introduction 3.2 Stack.
Stacks  Introduction  Applications  Implementations  Complex Applications.
Prefix, Postfix and Infix. Infix notation  A-B/(C+D)  evaluate C+D (call the result X),  then B/X (call the result Y),  and finally A-Y.  The order.
Copyright © Curt Hill Stacks An Useful Abstract Data Type.
CHP-3 STACKS.
Prefix, Postfix, Infix Notation. Infix Notation  To add A, B, we write A+B  To multiply A, B, we write A*B  The operators ('+' and '*') go in between.
Stacks A stack is a linear data structure that can be accessed only at one of its ends for storing and retrieving data LIFO (Last In First Out) structure.
CC 215 DATA STRUCTURES MORE ABOUT STACK APPLICATIONS Dr. Manal Helal - Fall 2014 Lecture 6 AASTMT Engineering and Technology College 1.
Applications of Stack Maitrayee Mukerji. Stacks Last In First Out (LIFO List) ◦ FILO? Insertions and Deletions from the same end called the Top Push(),
CE 221 Data Structures and Algorithms Chapter 3: Lists, Stacks, and Queues - II Text: Read Weiss, §3.6 1Izmir University of Economics.
CSC 172 DATA STRUCTURES. A TALE OF TWO STRUCTURES.
Review Use of Stack Introduction Stack in our life Stack Operations
Stacks Access is allowed only at one point of the structure, normally termed the top of the stack access to the most recently added item only Operations.
Revised based on textbook author’s notes.
COMPSCI 107 Computer Science Fundamentals
Infix to postfix conversion
Data Structures 5th Week
Stacks Chapter 7 introduces the stack data type.
CSC 172 DATA STRUCTURES.
COMPUTER 2430 Object Oriented Programming and Data Structures I
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Stacks Chapter 4.
Stack application: postponing data usage
Algorithms and Data Structures
Stacks – Calculator Application
Stacks – Calculator Application
Stacks – Calculator Application
PART II STACK APPLICATIONS
Stacks Chapter 5 Adapted from Pearson Education, Inc.
More About Stacks: Stack Applications
Stacks – Calculator Application
Queue Applications Lecture 31 Mon, Apr 9, 2007.
Infix to Postfix Conversion
Stacks.
Topic 15 Implementing and Using Stacks
(Part 2) Infix, Prefix & Postfix
Queue Applications Lecture 31 Tue, Apr 11, 2006.
Data Structures and Algorithms 2/2561
Chapter 7 (continued) © 2011 Pearson Addison-Wesley. All rights reserved.
Stacks A stack is an ordered set of elements, for which only the last element placed into the stack is accessible. The stack data type is also known as.
Presentation transcript:

stacks21 Stacks II Adventures in Notation

stacks22 The trouble with infix... Rules for expression evaluation seem simple -- evaluate expression left to right, results of each sub-expression becoming operands to larger expression -- but … All operators are not created equal -- multiplication & division take precedence over addition & subtraction...

stacks23 The trouble with infix... So it isn’t really all that simple -- we must first scan for higher-precedence operations, and evaluate these first -- and that’s not so easy to program -- so … In the calculator program, we rely on parentheses to tell us which operations to perform when -- hence the need for fully- parenthesized expression

stacks24 Alternatives to infix -- prefix Prefix notation, a.k.a. Polish notation Operator precedes operands –infix expression: A + B –prefix expression: +AB Parentheses become unnecessary –infix expression: (A + B) * C –prefix expression: * + A B C

stacks25 Converting from infix to prefix Write out operands in original order Place operators in front of their operands If there’s a compound expression, the prefix expression may have two or more operators in a row If parentheses are not present, pay attention to precedence

stacks26 A + B + C >>>>>>+ + A B C A - B + C >>>>>>+ - A B C A + (B - C) >>>>>+ A - B C A * ((B + C) - D) / E >>> / * A - + B C D E A + B * C / D >>>>+ A / * B C D A * B + C - D / E >>> - + * A B C / D E Conversion examples

stacks27 Prefix evaluation scan left to right until we find the first operator immediately followed by pair of operands evaluate expression, and replace the “used” operator & operands with the result continue until a single value remains

stacks28 Prefix Example + * / // original expression + * 2 3 9// 4/2 evaluated +6 9// 2*3 evaluated 15// 6+9 evaluated

stacks29 Another example * / // original expression * / // 4+3 evaluated * 2 / // 7-5 evaluated * 2 / 6 3// 2+4 evaluated * 2 2// 6/3 evaluated 4// 2*2 evaluated

stacks210 Prefix summary Operands (but often not operators) same order as infix Expression designated unambiguously without parentheses Improvement on infix, but still not quite as simple to evaluate as one might wish -- have to deal with exceptions

stacks211 Alternative II: Postfix Postfix is also known as reverse Polish notation -- widely used in HP calculators In postfix notation, operators appear after the operands they operate on As with prefix, operand order is maintained, and parentheses are not needed notPostfix expression is not merely a reverse of the equivalent prefix expression

stacks212 Postfix expression examples Simple expression: –Original Expression: A + B –Postfix Equivalent: A B + Compound expression with parentheses: –original: (A + B) * (C - D) –postfix: A B + C D - * Compound expression without parentheses: –original: A + B * C - D –postfix: A B C * + D -

stacks213 Postfix expression evaluation Read expression left to right When an operand is encountered, save it & move on When an operator is encountered, evaluate expression, using operator & last 2 operands saved, saving the result When entire expression has been read, there should be one value left -- final result

stacks214 Postfix evaluation using stack Postfix evaluation can easily be accomplished using a stack to keep track of operands As operands are encountered or created (through evaluation) they are pushed on stack When operator is encountered, pop two operands, evaluate, push result

stacks215 Postfix calculator code import java.util.*; import java.util.regex.*; public class PostfixCalculator { private String expression; private Stack nums; public static final Pattern CHARACTER = Pattern.compile("\\S.*?"); public static final Pattern UNSIGNED_DOUBLE = Pattern.compile("((\\d+\\.?\\d*)|(\\.\\d+))([Ee][-+]?\\d+)?.*?");

Postfix calculator code stacks216 public PostfixCalculator () { nums = new Stack (); expression = ""; }

stacks217 Postfix calculator code public void evalPostfix () { Scanner expression = new Scanner(this.expression); String next; do { if (expression.hasNext(UNSIGNED_DOUBLE)) { next = expression.findInLine(UNSIGNED_DOUBLE); nums.push(new Double(next)); }

stacks218 Postfix calculator code else { next = expression.findInLine(CHARACTER); calculate(next); } } while (expression.hasNext()); }

stacks219 Postfix calculator code public void calculate (String n) { if (nums.size() < 2) throw new IllegalArgumentException("Input expression: " + expression + " invalid"); double op2 = nums.pop(); double op1 = nums.pop(); char op = n.charAt(0);

stacks220 Postfix calculator code switch (op) { case '+': nums.push(op1 + op2); break; case '-': nums.push(op1 - op2); break; case '*': nums.push(op1 * op2); break; case '/': nums.push(op1 / op2); break; } }

stacks221 Postfix calculator code public double getResult() { if (nums.size() > 1 || nums.isEmpty()) throw new IllegalArgumentException("Input expression: " + expression + " invalid"); return (double)nums.pop(); } public void setExpression (String e) { expression = e; }

Postfix calculator code stacks222 public static void main (String [] args) { PostfixCalculator pc = new PostfixCalculator(); Scanner kb = new Scanner (System.in); String input; do { System.out.print ("Enter a postfix expression (or Q to quit: "); input = kb.nextLine(); if (input.equalsIgnoreCase("q")) System.out.println ("So long, and thanks for all the fish!");

Postfix calculator code stacks223 else { pc.setExpression(input); pc.evalPostfix(); System.out.println ("Your expression evaluates to: " + pc.getResult()); } } while (!input.equalsIgnoreCase("q")); }

stacks224 Translating infix to postfix Postfix expression evaluation is easiest type to program Next task is to take an infix expression and translate it into postfix for evaluation Some basic assumptions: –all operations are binary (no unary negative) –expressions are fully parenthesized

stacks225 Translating infix to postfix General method: –move each operator to the right of its corresponding right parenthesis –eliminate parentheses Example: (((A + B) * C) - (E * (F + G))) (((A B) + C) * (E (F G) +) * ) - A B+ C * E F G + * -

stacks226 Pseudocode for translation program Do { if (left parenthesis) read & push else if (operand) read & write to output string else if (operator) read & push else if (right parenthesis) read & discard pop operator & write to output string pop & discard left parenthesis } while (expression to read)

stacks227 OK -- but what if expression isn’t fully parenthesized? We have to fall back on the rules for expression evaluation we know & love –do expression in parentheses first –do other operations in order of precedence -- in case of tie, leftmost sub-expression wins Example: A - ( B + C) * D - E order: Postfix: A B C + D * - E -

stacks228 Algorithm for expression conversion Do if (left parenthesis) read & push else if (operand) read & write to file else if (arithmetic operator) // continued on next slide...

stacks229 Conversion algorithm continued while (stack not empty && stack.peek( ) != ‘(‘ && op precedence lower than stack.peek( )) pop stack & write to file read op push op else // character should be ‘)’ // next slide...

stacks230 Conversion algorithm continued read & discard right paren do pop stack & write to file while (stack.peek( ) != ‘(‘) pop & discard left paren while (expression to read) // ends outer loop while (stack not empty) pop & write to file