/
Stacks (and Queues) Stacks (and Queues)

Stacks (and Queues) - PowerPoint Presentation

phoebe-click
phoebe-click . @phoebe-click
Follow
435 views
Uploaded On 2017-06-19

Stacks (and Queues) - PPT Presentation

1 Stacks Stack what is it ADT Applications Implementations 2 3 Stacks and queues A stack is a very important data structure in computing science A stack is a sequence of elements to which new elements are added ID: 561207

top stack push pop stack top pop push int public array elements adt java return data element order size

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "Stacks (and Queues)" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

Stacks (and Queues)

1Slide2

Stacks

Stack: what is it?

ADTApplications

Implementation(s)

2Slide3

3

Stacks and queues

A

stack

is a very important data structure in computing science.A stack is a sequence of elements to which new elements are added (push

ed), and from which elements are removed (popped), at the same end.Stack sometimes referred to as a

last in, first out structure (

LIFO).In a queue

, elements are removed from the opposite end to which they are added.Queue sometimes referred to as a first in, first out

structure (FIFO).Slide4

4

Stacks and queues

The

difference

is the remove operation.

add

remove

add

removeSlide5

Last In First Out

B

A

D

C

B

A

C

B

A

D

C

B

A

E

D

C

B

A

top

top

top

top

top

A

5Slide6

6

Abstract Data Types (ADTs)

An abstract data type (

ADT

) is an abstraction of a data structure

An ADT specifies:

Data

stored

Operations

on the data

Error conditions

associated with operations

Example: ADT

modeling a simple stock trading system

The data stored are buy/sell ordersThe operations supported areorder

buy(stock, shares, price)order sell(stock, shares, price)

void cancel(order)Error conditions:Buy/sell a nonexistent stockCancel a nonexistent orderSlide7

The Stack ADT

The

Stack ADT stores

arbitrary objects

Insertions and deletions follow the last-in first-out

scheme

Think of a spring-loaded plate dispenser. (Pez?)

7Slide8

The Stack ADT

Main stack

operations:

push(object): inserts

an element

Object pop(): removes and returns the last inserted element

Auxiliary

stack operations:Object

peek(): returns the last inserted element without removing it. (Sometimes appears as Object top())

integer size

(): returns the number of elements storedboolean

isEmpty

(): indicates whether no elements are storedWHICH ONES ARE ACCESSOR OR MUTATOR METHODS???

8Slide9

9

Stack Operations

Assume a simple stack for integers.

Stack s = new Stack();

s.push(12);

s.push(4);

s.push( s.top() + 2 );

s.pop()

s.push( s.top() );

//what are contents of stack?

Slide10

10

Stack usage and limitations

Write an algorithm to

Reverse

the contents of an array. How about using a stack?

Write

a method to print out contents of stack in

reverse order

. Slide11

11

Stack

Interface

in Java

Java interface

corresponding

to our Stack ADT

Requires the definition of class

EmptyStackException

Different from the built-in Java class

java.util.Stack

public interface

Stack<E>

{

public int size(); public

boolean

isEmpty()

;

public

Object

top()

throws

EmptyStackException

;

public void

push(E element)

;

public

Object

pop()

throws EmptyStackException;}Slide12

12

Exceptions

Attempting the execution of an operation of ADT may sometimes

cause an error condition

, called an exception

Exceptions are said to be

thrown

by an operation that cannot be executed

In the Stack ADT, operations

pop

and top cannot be performed if the stack is

emptyAttempting the execution of pop or top on an empty stack throws an

EmptyStackExceptionSlide13

13

Applications of Stacks

Direct applications

Page-visited

history in a Web browser

Undo

sequence in a text editor

Chain of

method calls

in the Java Virtual Machine

Indirect applications

Auxiliary data structure for algorithms

Component of other data structuresSlide14

14

Method Stack in the JVM

The Java Virtual Machine (JVM)

keeps track

of the chain of active methods with a

stack

When a method is called, the JVM

pushes on the

stack

Local variables and return value

Program

counter, keeping track of the statement being executed

When

a method ends,

it’s

popped

from the stack and control is passed to the method on top of the stack

main

() {

int

i

= 5;

foo(

i

);

}

foo

(

int

j) {

int

k;

k = j+1;

bar(k

);

}

bar

(

int

m) {

}

bar PC = 1

m = 6

foo

PC = 3

j = 5

k = 6

main

PC = 2

i = 5Slide15

Array-based Stack

Allocate an array of some size (

pre-defined)

Maximum N elements in stack

Bottom stack element stored at element 0

last index in the array is the top

What is index when stack is empty?

Increment top

when one element is pushed, decrement after

pop

15Slide16

Array-based Stack

16

S

0

1

2

t

Algorithm

size

()

return

top

+

1

Algorithm

pop

()

if

isEmpty

()

then

throw

EmptyStackException

else

top

top

1

return

S

[

top

+

1]Slide17

17

Array-based Stack (cont.)

The array storing the stack elements

may become full

A push operation will then

throw

a

FullStackException

Limitation of the array-based implementation

Not intrinsic to the Stack ADT

S

0

1

2

t

Algorithm

push

(

o

)

if

t

=

S.length

1

then

throw

FullStackException

else

t

t

+

1

S

[

t

]

oSlide18

18

Performance and Limitations

Performance

Let

n

be the number of elements in the stack

The

space

used is

O

(

n

)

Each operation runs in time

O(1)Limitations

The maximum size of the stack must be defined a priori and

cannot be changedTrying to push a new element into a full stack causes an implementation-specific exceptionSlide19

19

Common Stack Error

Stack s = new Stack();

// put stuff in stack

for(

int

i

= 0;

i

< 7;

i

++)

s.push

(

i );// print out contents of stack // while emptying itfor(int i = 0; i < s.size(); i++) System.out.println(

s.pop

() );

/

/ Output? Why?Slide20

20

Corrected Version

Stack s = new Stack();

// put stuff in stack

for(

int

i

= 0;

i

< 7;

i

++)

s.push

(

i );// print out contents of stack // while emptying itint limit = s.size();for(int i = 0; i < limit; i++)

System.out.println

(

s.pop

() );

//or

// while( !

s.isEmpty

() )

//

System.out.println

(

s.pop

() );Slide21

21

Array-based Stack in Java

public class

ArrayStack

<E>

implements

Stack<E>

{

// holds the stack elements

private

E S[ ]; // index to top element private int top = -1;

// constructor

public

ArrayStack

(

int

capacity)

{

S = (E[])

new

Object

[capacity]);

}

public

E

pop() throws

EmptyStackException {

if isEmpty

() {

throw new EmptyStackException

(

“Empty stack: cannot pop”)

; }

E temp = S[top]

;

// facilitate garbage collection:

S[top] =

null

;

top = top – 1;

return

temp;

}

(other methods of Stack interface)Slide22

22

Example use in Java

public class

Tester

{

// … other methods

public

void

intReverse

(Integer a[])

{ Stack<Integer> s; s = new

ArrayStack

<Integer>()

;

for(

int

i

= 0;

i

<

a.length

; a++)

s.push

(a[

i

]);

for(

int

i = 0; i < a.length; a++) a[i] = s.pop();

}

public void

floatReverse(Float f[]) {

Stack<Float> s; s

= new ArrayStack<Float>();

… (code to reverse array f) … }Slide23

23

Parentheses Matching

Each

(

,

{

, or “[”

must be paired with a matching “

)”, “}

”, or “[”

correct: ( )(( )){([( )])} correct: ((( )(( )){([( )])}

incorrect: )(( )){([( )])} incorrect: ({[ ])}

incorrect: ( Slide24

24

Parentheses Matching Algorithm

Algorithm

ParenMatch

(

X,n

):

Input:

An array

X

of

n

tokens, each of which is either a

grouping symbol,

a variable, an arithmetic operator, or a number

Output: true

if and only if all the grouping symbols in X matchLet S be an empty stackfor i=0 to n-1 do if X

[

i

] is an

opening

grouping symbol

then

S

.push

(

X

[

i

])

else if

X

[

i

] is a

closing

grouping symbol

then if S.isEmpty()

then return false {nothing to match with} if S.pop() does not match the type of X[i] then return false

{wrong type} if S

.isEmpty() then

return true {every symbol matched}

else return false {some symbols were never matched}Slide25

25

HTML Tag Matching

<body>

<center>

<h1>

The Little Boat

</h1>

</center>

<p>

The storm tossed the little

boat like a cheap sneaker in an

old washing machine. The three

drunken fishermen were used to

such treatment, of course, but

not the tree salesman, who even as

a stowaway now felt that he

had overpaid for the voyage. </p><ol><li> Will the salesman die? </li><li> What color is the boat? </li><li> And what about Naomi? </li></ol></body>

The Little Boat

The storm tossed the little boat

like a cheap sneaker in an old

washing machine. The three

drunken fishermen were used to

such treatment, of course, but not

the tree salesman, who even as

a stowaway now felt that he had

overpaid for the voyage.

1. Will the salesman die?

2. What color is the boat?

3. And what about Naomi?

For

fully-correct HTML

, each

<name>

should pair with a matching

</name>Slide26

26

Infix notation

Consider the

arithmetic

expression: 3 + 4 * (5 - 2) - 3 -

1Binary operators requires two

operands.

To evaluate the expression, we use the following rules: *

and / have higher precedence than

+ and -,

when operators have the same precedence, we apply them from left to right,

brackets change the order of precedence

.Hence the following example gives a different answer:

3 + 4 * 5 - 2 - (3 - 1)Consider a

system of arithmetic with different rules…Slide27

27

Reverse Polish

With

reverse Polish

(postfix) notation, no precedence rules or parentheses required!

In postfix notation, we put the operator after its operands instead of between them.

Hence,

instead of 5 + 4

, we have 5 4 +.Slide28

Postfix Notation

The first expression

above, would be re-written as:

3 + 4 * (5 - 2) - 3 - 1

3 4 5 2 - * + 3 - 1 –

while the second would be written as: 3 + 4 * 5 - 2 - (3 - 1)

3 4 5 * + 2 - 3 1 -

-The operands

are written in the same order while the operators are now written in the

order in which they are to be applied.

28Slide29

Evaluating Postfix Expressions

29Slide30

30

Examples

Let us first apply it to our simple example:

5 4 +

Answer is 9

Next ‘Token’: 5 4 +

With the expression: 3 4 5 2 - * + 3 - 1 -

Next -

* + 3 - 1 -

5

4

5

9

2

5

43

3

4

3

12

3

15

3

15

12

1

12

11