stacks and applications

23
10/9/2009 Center for Development of Advanced Computing 1 Stacks and Applications

Upload: srinu63

Post on 18-Nov-2014

491 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 1

Stacks and Applications

Page 2: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 2

Stacks

• Stack ADT

– It is a special kind of list

– Can only add/delete/look at one end commonly

referred to as top)

• Advantages

– They are simple, easy to understand

– Each operation is O(1)

Page 3: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 3

Stacks …

• Examples

– Pile of cards

– Cars in a driveway

• It is

– Push-down list

– Last In First Out (LIFO) list

Page 4: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 4

Stack ADT

• Data members

– Array, size of the stack and top of the stack

• Operations

– Push, pop, peep, IsEmpty, Is Full

Page 5: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 5

Cont …class _stack_

{

int *st;

int size;

int tos;

public:

void push(int);

int pop();

int peep();

bool IsEmpty();

bool IsFull();

_stack_() ;

~_stack()_ ;

void display() ;

};

Page 6: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 6

Applications

• Function Activation Records

• Balancing symbols

• Expression evaluation (Postfix expression)

• Infix to prefix conversion

• Infix to postfix conversion …..

Page 7: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 7

App1: Activation records

• when a function is called in C++ (or any language):– suspend the current execution sequence

– allocate space for parameters, locals, return value, …

– transfer control to the new function

• when the function terminates:– deallocate parameters, locals, …

– transfer control back to the calling point (& possibly return a value)

• note: functions are LIFO entities– main is called first, terminates last

– if main calls Foo and Foo calls Bar, then Bar terminates before Foowhich terminates before main

• a stack is a natural data structure for storing information about function calls and the state of the execution

Page 8: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 8

Activation records

• an activation record stores info (parameters, locals, …) for each invocation of a function

• when the function is called, an activation record is pushed onto the stack– when the function terminates, its activation record is popped

– note that the currently executing function is always at the top of the stack

Page 9: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 9

Activation record .. recursion

Page 10: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 10

App 2: Balancing Symbols

• When analyzing arithmetic expressions, it is

important to determine whether an

expression is balanced with respect to

parentheses

– (a+b*(c/(d-e)))+(d/e)

• Problem is further complicated if braces or

brackets are used in conjunction with

parenthesis

• Solution is to use stacks!

Page 11: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 11

Balancing Symbols

• start with an empty stack of characters

• traverse the expression from left to right

– if next character is a left delimiter, push onto the

stack

– if next character is a right delimiter, must match

the top of the stack

Page 12: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 12

Balancing symbols:

(a+b*[c/{d-e}])+(f/g)Character Operation Stack contents

( Push (

a,+, b, * Skip (

[ Push ( [

c, / Skip ( [

{ Push ( [ {

d, -, e Skip ( [ {

} Pop and match ( [

] Pop and match (

) Pop and match Empty

+ Skip Empty

( Push (

f, /, g skip (

) Pop and match Empty

End of string Is stack empty

Page 13: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 13

Evaluation of arithmetic expressions

• Prefix: + a b• Infix: a + b (what we use in grammar school)• Postfix: a b +

Page 14: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 14

App 3: Infix to Postfix Conversion

• Rules:

– Start from left of the infix expression

– Operands immediately go directly to output – postfix expression

– Operators are pushed into the stack (including parenthesis)

• Priority of the operators (assume)

- precision 1: * /

- precision 0: + -

- precision -1: (

• Lower precedence operator cannot be on top of a higher precedence operator

– If a lower precedence operator is encountered, pop the operators and append them to the output postfix string till we encounter a lesserprecedence operator or stack is empty.

• If we encounter a right parenthesis, pop from stack until we get matching left parenthesis. Do not output parenthesis.

• If the infix string reaches end of string, pop all the operators from stack and append them to the output postfix expression string

Page 15: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 15

Example: a+b*c+(d*e+f)*g

Page 16: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 16

Infix to Postfix ExampleA + B * C - D / E

Infix Operation on stack

Stack postfix

a Empty a

+ Push + a

b + ab

* Check and push +* ab

c +* abc

- Check and push - abc*+

d - abc*+d

/ Check and push -/ abc*+d

e -/ abc*+de

End of string Pop till empty abc*+de/-

Page 17: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 17

Infix to Postfix Example #2A * B - ( C + D ) + E

Infix Operation on stack Stack postfix

a Empty a

* Push * a

b * ab

- Check and push - ab*

( Push -( ab*

c -( ab*c

+ Check and push -(+ ab*c

d -(+ ab*cd

) Pop and append to postfix till ‘(‘

- ab*cd+

+ Check and push + ab*cd+-

e + ab*cd+-e

End of string Pop till empty ab*cd+-e+

Page 18: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 18

App 4: Postfix EvaluationRules:

Operand: push

Operator: pop 2 operands, perform the operation, push result back onto stack

Page 19: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 19

Evaluation : 123+*

Character Stack operation

1 1

2 1 2

3 1 2 3

+ 1 5 Pop 3, 2 ;2+3 = 5 Push 5

* 5 Pop 5, 1;1*5 = 5Push 5

End of string Result is 5

Page 20: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 20

Character Stack Operation

6 6

5 6 5

2 6 5 2

3 6 5 2 3

+ 6 5 5 Pop 3, 2; 2+3 = 5 ; push 5

8 6 5 5 8

* 6 5 40 Pop 8, 5; 5*8 = 40; push 40

+ 6 45 Pop 40, 5; 5+40 = 45; push 45

3 6 45 3

+ 6 48 Pop 3, 45; 45+3 = 48; push 48

* 288 Pop 48, 6; 6*48 = 288; push 288

End of string Result is 288

Evaluation : 6 5 2 3 + 8 * + 3 + *

Page 21: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 21

Infix to Prefix conversion• Rules:

– Start from right of the infix expression

– Operands immediately go directly to output – output expression

– Operators are pushed into the stack (including right parenthesis)

• Priority of the operators (assume)

- precision 1: * /

- precision 0: + -

- precision -1: )

• Lower precedence operator cannot be on top of a higher precedence operator

– If a lower precedence operator is encountered, pop the operators and append them to the output postfix string till we encounter a lesser or equal precedence operator or stack is empty.

• If we encounter a left parenthesis, pop from stack until we get matching right parenthesis. Do not output parenthesis.

• If the infix string reaches end of string, pop all the operators from stack and append them to the output expression string.

• Now reverse the output expression string. This is the final prefix expression

Page 22: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 22

Infix to Prefix Example #1A * B - ( C + D ) + E

Infix Operation on stack Stack Output string

E Empty E

+ Push + E

) Push + ) E

D + ) ED

+ Check and push + ) + ED

C + ) + Edc

( Pop and append to o/p till ’)’

+ Edc+

- Check and push + - Edc+

B +- Edc+b

* Check and push +-* Edc+b

A +-* Edc+ba

End of string Pop till empty Edc+ba*-+

Prefix expression is: +-*ab+cde

Page 23: Stacks and Applications

10/9/2009 Center for Development of Advanced Computing 23

Thank you