Presentation is loading. Please wait.

Presentation is loading. Please wait.

A stack is a linear, homogeneous, container that stores and dispenses its content in a LIFO manner. LIFO - Last In First Out The last (most recent) item.

Similar presentations


Presentation on theme: "A stack is a linear, homogeneous, container that stores and dispenses its content in a LIFO manner. LIFO - Last In First Out The last (most recent) item."— Presentation transcript:

1 A stack is a linear, homogeneous, container that stores and dispenses its content in a LIFO manner. LIFO - Last In First Out The last (most recent) item inserted, and not yet removed, will be the first (next) item dispensed. Real World Examples  a spring-loaded cafeteria tray dispenser.  a driveway wide that is one-car wide The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub.

2 Stack Operations push insert a new item into the stack pop remove one item from the container top inspect one item from the container, but don’t remove it An Abstract Picture push pop top The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub.

3 (i.e. the class specification) Domain sequence of Object Constructor public Stack() post: this == sequence{} Query methods public boolean isEmpty() post: result == ( this-> size() == 0) public Object top() pre: ! isEmpty() post: result == this-> first() Update methods public void push(Object z) post: this == this @pre -> prepend( z ) public void pop() pre: ! isEmpty() (throws java.util.EmptyStackException) post: this == this @pre -> subSequence( 2, this @pre -> size() ) Stack The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub.

4 Stack + Stack() + boolean isEmpty() + void push(Object z) + void pop() + Object top() Example Stack s1, s2; String str; s1 = new Stack(); s1.push( “humble” ); s1.push( “bumble” ); s1.push( “mumble” ); s1.pop(); s1.push( “tumble” ); str = (String) s1.top(); s1.push( “rumble” ); s1.push( “crumble” ); s1.pop(); s1.push( s1.top() ); s2 = new Stack(); while ( !s1.isEmpty() ) { s2.push( s1.top() ); s1.pop(); } The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub.

5 How would you represent...... a bounded stack? Would you use inheritance or aggregation?... an unbounded stack? The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub.

6 public class Stack private SimplerSingleList theList; /* post:theList.isEmpty() */ public Stack() { theList = new SimplerSingleList(); } /* post:result == theList.isEmpty() */ public boolean isEmpty() { return theList.isEmpty(); } /* post:theList == theList@pre with z appended to front*/ public void push(Object z) { theList.start(); theList.insertBefore(z); } //continued … The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub.

7 /* pre:! theList.isEmpty() post:theList == theList@pre with first item removed */ public void pop() { theList.start(); theList.removeAt(); } /* pre:! theList.isEmpty() post:result == first item of theList */ public Object top() { theList.start(); return theList.item(); } The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub.

8 Automatic Data During Program Execution  Each method call causes an activation record (local variables & parameters) to be pushed upon the run-time stack.  When a method returns its activation record is popped off the run-time stack. Compilers (parsing)  Each time the compiler encounters a { it is pushed upon the parse stack.  Each time the compiler encounters a } it is pops the matching } from the parse stack. Automata Theory The finite state machine can be augmented by adding a stack. Such a device is called a push-down automaton. The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub.

9 Stacks are useful for evaluating many kinds of expressions. Reverse Polish notation In Reverse Polish Notation (RPN) operands occur before their associated operator, and operators occur as soon as possible. (Also called postfix.) Examples InfixRPN 7 - 37, 3, - 1 + (2*3) - 41, 2, 3, *, +, 4, - 8 * 4 + 58, 4, *, 5, + ((9+8)*7)-(6*(5+(4/3)))9,8,+,7,*,6,5,4,3,/,+,*,- Rules: 1) Operands occur left-to-right in the same order as infix expression 2) Operation follows immediately after its operand/subexpression The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub.

10 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub.

11 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 9

12 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 9 8

13 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 17

14 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 17 7

15 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 119

16 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 119 6

17 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 119 6 5

18 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 119 6 5 4

19 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 119 6 5 4 3

20 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 119 6 5 1

21 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 119 6 6

22 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 119 36

23 9, 8, +, 7, *, 6, 5, 4, 3, /, +, *, - Example OperandStack Scan expression left to right, and… For each operand - push For each operator - replace two top operands by their subexpression value (Note: top of stack is right operand, second in stack is left.) The Object of Data Abstraction and Structure, David D. Riley © Addison Wesley pub. 83


Download ppt "A stack is a linear, homogeneous, container that stores and dispenses its content in a LIFO manner. LIFO - Last In First Out The last (most recent) item."

Similar presentations


Ads by Google