Chapter 6: Stack Implementation

Download Report

Transcript Chapter 6: Stack Implementation

Stack Implementations
Chapter 6
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Contents
• A Linked Implementation
• An Array-Based Implementation
• A Vector-Based Implementation
 Java Class Library: The Class Vector
 Using a Vector to Implement the ADT Stack
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Objectives
• Implement ADT stack by using either
 Linked chain
 Array
 Vector
• Compare and contrast various
implementations and their performance
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Linked Implementation
• Consider push, pop, peek
 Each involves top of stack
• Best to put top of stack at head node
 Fastest, easiest to access
• Java will manage reclaiming memory
without instruction from programmer
Note: Code listing files
be in same folder
• Note source code for linkedmust
implementation
 Listing 6-1
as PowerPoint files
for links to work
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Figure 6-1 A chain of linked nodes that implements a stack
Copyright ©2012 by Pearson Education, Inc. All rights reserved
FIGURE 6-2 (a) A new node that references the node at the top
of the stack; (b) the new node is now at the top of the stack
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Linked Implementation
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Figure 6-3 The stack (a) before the first node
in the chain is deleted
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Figure 6-3 The stack (b) after the first node
in the chain is deleted
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Array Based Implementation
• Again the question:
 Were to place the top entry?
• More efficient operations with bottom of
stack at beginning of array
 Top of stack at last occupied entry
• Must consider memory wastage of unused
array elements
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Figure 6-4 An array that implements a stack; its first location
references (a) the top entry in the stack;
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Figure 6-4 An array that implements a stack; its first location
references (b) the bottom entry in the stack;
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Adding to the Top
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Retrieving the Top
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Figure 6-5 An array-based stack after its top entry is removed by
(a) decrementing topIndex;
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Figure 6-5 An array-based stack after its top entry is removed by
(b) setting stack[topIndex] to null and
then decrementing topIndex
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Method Pop
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Vector-Based Implementation
• Vector is a structure which behaves like a
high level array
 Has methods to access entries
 Grows in size as needed (hidden from client)
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Figure 6-6 A client using the methods given in StackInterface;
these methods interact with a vector’s methods
to perform stack operations
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Constructors and Methods of
Vector
•
•
•
•
•
•
•
•
public
public
public
public
public
public
public
public
Vector()
Vector(int initialCapacity)
boolean add(T newEntry)
T remove(int index)
void clear()
T lastElement()
boolean isEmpty()
int size()
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Using a Vector to
Implement ADT Stack
• Similar to using an array
 But easier
• First element is bottom of stack
• Vector adjusts size automatically
 Our stack implementation need not deal with
adjusting size
• View outline, Listing 6-3
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Stack Methods for Vector
Implementation
Copyright ©2012 by Pearson Education, Inc. All rights reserved
Should VectorStack
Extend Vector?
• If we use inheritance
 It would have available all methods of Vector
 Would allow access to any element
 This violates premise of ADT Stack
• Design decision
 Do NOT use inheritance
Copyright ©2012 by Pearson Education, Inc. All rights reserved
End
Chapter 6
Copyright ©2012 by Pearson Education, Inc. All rights reserved