Tải bản đầy đủ (.ppt) (45 trang)

Bài giảng Cấu trúc dữ liệu_Phần Stack

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.52 MB, 45 trang )

Chapter 6
Stacks
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-2
Chapter Objectives

Examine stack processing

Define a stack abstract data type

Demonstrate how a stack can be used to
solve problems

Examine various stack implementations

Compare stack implementations
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-3
Stacks

A stack is a linear collection whose elements
are added and removed from one end

A stack is LIFO – last in, first out

The last element to be put on the stack is the
first element to be removed



A stack is usually depicted vertically, with
additions and deletions occurring at the top
of the stack
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-4
FIGURE 6.1
A conceptual view of a stack
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-5
FIGURE 6.2
The operations on a stack
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-6
FIGURE 6.3
The StackADT interface in UML
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-7
Listing 6.1
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.

6-8
Using Stacks

Stacks are particularly helpful when solving
certain types of problems

Consider the undo operation in an
application

keeps track of the most recent operations
in reverse order
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-9
Postfix Expressions

Let's examine a program that uses a stack to
evaluate postfix expressions

In a postfix expression, the operator comes
after its two operands

We generally use infix notation, with
parentheses to force precedence:
(3 + 4) * 2

In postfix notation, this would be written
3 4 + 2 *
Copyright © 2005 Pearson

Addison-Wesley. All rights
reserved.
6-10
Postfix Expressions

To evaluate a postfix expression:

scan from left to right, determining if the next
token is an operator or operand

if it is an operand, push it on the stack

if it is an operator, pop the stack twice to get the
two operands, perform the operation, and push
the result onto the stack

At the end, there will be one value on the
stack, which is the value of the expression
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-11
FIGURE 6.4 Using a stack to
evaluate a postfix expression
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-12
Postfix Expressions


To simplify the example, let's assume the
operands to the expressions are integer
literals

Our solution uses an ArrayStack, though
any implementation of a stack would suffice
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-13
Listing 6.2
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-14
Listing 6.2 (cont.)
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-15
Listing 6.3
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-16
Listing 6.3 (cont.)
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-17

Listing 6.3 (cont.)
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-18
Listing 6.3 (cont.)
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-19
Listing 6.3 (cont.)
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-20
FIGURE 6.5 A UML class diagram
for the postfix expression program
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-21
Using Stacks - Traversing a
Maze

A classic use of a stack is to keep track of
alternatives in maze traversal or other trial
and error algorithms

Using a stack in this way simulates recursion


Recursion is when a method calls itself
either directly or indirectly
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-22
Using Stacks - Traversing a
Maze

Run-time environments keep track of method
calls by placing an activation record for each
called method on the run-time stack

When a method completes execution, it is
popped from the stack and control returns to
the method that called it

Which is now the activation record on the top of
the stack
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-23
Using Stacks - Traversing a
Maze

In this manner, we can traverse a maze by
trial and error by using a stack to keep track
of moves that have not yet been tried
Copyright © 2005 Pearson

Addison-Wesley. All rights
reserved.
6-24
Listing 6.4
Copyright © 2005 Pearson
Addison-Wesley. All rights
reserved.
6-25
Listing 6.4 (cont.)

×