Transcript lecture30

CSC 205 – Java Programming II
Lecture 30
April 3, 2002
Stack
• A stack is an abstract data type (ADT) that
contains a sequence of elements and
honors the last-in-first-out (LIFO) rule.
• Conceptually, the only element that can be
removed, accessed, modified is the one
which was most recently inserted.
– Pop and push are the two basic stack
operations
Stack
top
PUSH
POP
last-in-first-out
Examples
Green
Red
Red
Yellow
pop
pop
Red
Yellow
push
green
Green
Red
Yellow
Java Stack Class
• The Java Stack class represents a stack of
objects.
– It outdated the Java Collections Framework
– Available since JDK1.0
• It extends class Vector with 5 additional
operations.
• With its top at the index size()-1
top
Java Stack API
boolean empty()
Tests if this stack is empty.
Object peek()
Looks at the object at the top of this stack without removing it
from the stack.
Object pop()
Removes the object at the top of this stack and returns that
object as the value of this function.
Object push(Object item)
Pushes an item onto the top of this stack.
int search(Object o)
Returns the 1-based position where an object is on this stack.
Example
• Checking for balanced braces
– abc{defg{ijk}{l{mn}}op}qr
– abc{def}}ghij{kl}m
balanced
not balanced
• The braces are balanced if
– Each time you encounter a }, it matches an
already encountered {
– When you reach the end of the string, you
have matched each {
Pseudocode Solution
• A simplified solution in pseudocode
while (not at the end of the string) {
if (the next character is a ‘{’) {
stack.push(‘{’)
}
else if (the character is a ‘}’)
openBrace = stack.pop()
}
}
Examples
{a{b}c}
{
{a{bc}
{
{ab}c}
{
{
{
{
{
{
{
1. push “}”
2. push “}”
3. pop
4. pop
Stack empty balanced
1. push “}”
2. push “}”
3. pop
Stack not empty not balanced
1. push “}”
2. push “}”
3. pop
4. pop
Stack empty balanced
Problems w/ The Stack Class
• All the Vector methods can be used
– For examples
myBookStack.get(7);
myBookStack.remove(0);
//the element right at the
“bottom” can be removed!
Convenient or Risky?
myBookStack.get(7);
myBookStack.remove(0);
Alternative Designs
• Implement a RealStack class
– Use a LinkedList object as its only field
– Provide push and pop methods
public Object push(Object o) {
list.add(o);
return o;
}
public Object pop(Object o) {
return list.removeLast(o);
}
Activation Stack
• Stacks are used almost exclusively by
computer systems
• An activation stack is used by a compiler
/interpreter to save the method information
when a method is called
• The stack is part of the main memory.
• Other parts include a heap to hold data
Activation Records
• Each activation record includes
– The return address
– The value of each argument
– The values of the method’s other local
variables
Decimal To Binary
public void processInput(String s) {
writeBinary(Integer.parseInt(s)); //RA1
}
public void writeBinary(int n) {
if (n<=1)
throw new IllegalArgumentException();
if (n<=1)
gui.println(n);
else {
writeBinary(n/2); //RA2
gui.println(n%2);
}
}
Example
RA1
6
RA2
3
RA1
6
RA2
1
RA2
3
RA1
6
RA2
3
RA1
6
RA1
6