CS180 Recitation Apr 13, 2012 Stack Data structure Stack Class - - PowerPoint PPT Presentation

cs180 recitation
SMART_READER_LITE
LIVE PREVIEW

CS180 Recitation Apr 13, 2012 Stack Data structure Stack Class - - PowerPoint PPT Presentation

CS180 Recitation Apr 13, 2012 Stack Data structure Stack Class public class Stack { 1 private int size = 100; 2 top = 1; private int 3 private String [ ] data = new String [ size ] ; 4 . . . 5 } 6 Stack Variables Can


slide-1
SLIDE 1

CS180 Recitation

Apr 13, 2012

slide-2
SLIDE 2

Stack Data structure

Stack Class

1

public class Stack {

2

private int size = 100;

3

private int top = −1;

4

private String [ ] data = new String [ size ] ;

5

. . .

6

}

Stack Variables

◮ Can contain ’size’ #Objects. ◮ This stack is a stack of String Objects. Change ’String’ to

the datatype you want to hold in the stack

◮ ’top’ points to the current index of the top most value in the

stack.

slide-3
SLIDE 3

Stack Data structure

Stack Operations

◮ pop() - Retrieve the top element of the stack. ◮ push() - Add an element to the top of the stack. ◮ isEmpty() - Check if the stack is empty.

slide-4
SLIDE 4

Stack Data structure

push()

1

public void push ( String element ) throws StackOverFlowException

2

i f ( top == ( size − 1)) {

3

throw new StackOverFlowException ( ) ;

4

}

5

top ++;

6

data [ top ] = element ;

7

}

slide-5
SLIDE 5

Stack Data structure

pop()

1

public String pop ( ) {

2

i f ( top == −1) {

3

throw new StackEmptyException ( ) ;

4

}

5

int curTop = top ;

6

top−−;

7

return data [ curTop ] ;

8

}

slide-6
SLIDE 6

Stack Data structure

isEmpty()

1

public boolean isEmpty ( ) {

2

return top == −1;

3

}

...Experiment with the stack code in course website

slide-7
SLIDE 7

Using Stacks

Infix Notations

◮ 5 + 3 ◮ 5 + 3 * 4 ◮ (5 + 3) * 4

Reverse Polish Notation - RPN

◮ 5 3 + ◮ 5 3 4 * + ◮ 5 3 + 4 * ◮ Note how priority is encoded without parenthesis ◮ Also called Postfix

slide-8
SLIDE 8

Using Stacks

Infix Notations

◮ 5 + 3 ◮ 5 + 3 * 4 ◮ (5 + 3) * 4

Polish Notation - Prefix

◮ + 5 3 ◮ + 5 * 3 4 ◮ * + 5 3 4 ◮ Again, Note how priority is encoded without parenthesis

slide-9
SLIDE 9

Using Stacks

RPN - Useage

◮ Almost all compilers, including Java. ◮ Very easy to evaluate. ◮ No need to scan entire input looking for matching

parenthesis to identify which operation to do next.

slide-10
SLIDE 10

Using Stacks

Evaluate the RPN: 5 3 + 4 * using a stack

◮ Scan input from left to right. ◮ If operand, push. ◮ If operator, pop 2 values from the stack, perform the

  • peration and push the result.
slide-11
SLIDE 11

Using Stacks

Evaluate the RPN: 5 3 + 4 * using a stack

◮ 5 - operand → push

5

slide-12
SLIDE 12

Using Stacks

Evaluate the RPN: 5 3 + 4 * using a stack

◮ 3 - operand → push

3 5

slide-13
SLIDE 13

Using Stacks

Evaluate the RPN: 5 3 + 4 * using a stack

◮ + , operator → pop two values. i.e pop 3 and 5 ◮ perform the operation. Perform 5 + 3 ◮ push result into stack

8

slide-14
SLIDE 14

Using Stacks

Evaluate the RPN: 5 3 + 4 * using a stack

◮ 4 - operand → push

4 8

slide-15
SLIDE 15

Using Stacks

Evaluate the RPN: 5 3 + 4 * using a stack

◮ * , operator → pop, perform operation and push result into

stack 32

slide-16
SLIDE 16

Using Stacks

Evaluate the RPN: 5 3 + 4 * using a stack

◮ We’ve reached the end of input ◮ If there are no errors in the input, there will be one element

in the stack. It will be the result. 32

slide-17
SLIDE 17

Expression Trees

+ * In: 5*x+ 2*y Post: 5x*2y*+ Pre: +*5x*2y * 5 x 2 y + * In: 5*x+ 2*y + z/v Post: 5x*2y*+zv/+ Pre: ++*5x*2y/zv * 5 x 2 y z v + /

slide-18
SLIDE 18

Expression Trees

Building expression trees from RPN: 5 x * 2 y * +

◮ 5 operand. Create tree with single node and push into

stack

5

Tuesday, April 10, 2012

slide-19
SLIDE 19

Expression Trees

Building expression trees from RPN: 5 x * 2 y * +

◮ ’x’, operand. Create tree with single node and push into

stack

x

5

Tuesday, April 10, 2012

slide-20
SLIDE 20

Expression Trees

Building expression trees from RPN: 5 x * 2 y * +

◮ *, operator. Pop two trees from stack, create new tree and

push new tree into stack

* 5 x

slide-21
SLIDE 21

Expression Trees

Building expression trees from RPN: 5 x * 2 y * +

◮ 2, operand. Create tree with single node and push into

stack

x 2

* 5 x

◮ And so on, until you have the entire expression tree.

slide-22
SLIDE 22

Assignment Questions

We perform push a, push b, push c, pop, push d, pop pop

  • n empty stack. The current Stack will be?

◮ a ◮ a b c d (Stack Top element on the right) ◮ a b d ◮ a b

slide-23
SLIDE 23

Assignment Questions

How do you perform post order traversal of the tree below?

y + * * 5 x 2 y z v + /

◮ postOrder(node.left); postOrder(node.right);print value at

node

◮ print value at node; postOrder(node.left);

postOrder(node.right);

◮ postOrder(node.right); postOrder(node.left);print value at

node

slide-24
SLIDE 24

Assignment Questions

Post order Traversal of the tree below will give?

y + * * 5 x 2 y z v + /

◮ 5 x * 2 y *+ z v / + ◮ 5 x 2 * y * z + v / + ◮ 5 2 y z * * + v / + ◮ 5 2 z + v / +