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. Will the salesman[r]
Trang 1Data Structures and
Algorithms
"
Stacks and Queues!
Trang 2Outline"
Trang 3Stacks"
Trang 4The Stack ADT"
arbitrary objects!
• Insertions and deletions
follow the last-in first-out
– object pop(): removes and
returns the last inserted
element!
• Auxiliary stack operations:!
– object top(): returns the last inserted element without removing it!
– integer size(): returns the number of elements
stored!
– boolean isEmpty():
indicates whether no elements are stored!
Trang 5Stack Interface in Java"
• Different from the
built-in Java class
java.util.Stack
public interface Stack { public int size();
public boolean isEmpty();
public Object top() throws EmptyStackException;
public void push(Object o);
public Object pop() throws EmptyStackException;
}
Trang 6• 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 empty!
• Attempting the execution
of pop or top on an empty stack throws an
EmptyStackException!
Trang 7Applications of Stacks"
Machine!
– Auxiliary data structure for algorithms!
Trang 8Method 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 a frame
containing!
– Local variables and return value!
– Program counter, keeping track of the
statement being executed !
• When a method ends, its frame is
popped from the stack and control is
passed to the method on top of the
stack!
• Allows for recursion"
main() { int i = 5;
foo(i);
}
foo(int j) { int k;
k = j+1;
bar(k);
}
bar(int m) { …
Trang 9track of the index of
the top element !
else
t ← t - 1
return S[t + 1]
Trang 10Array-based Stack (cont.)"
• The array storing the
stack elements may
else
t ← t + 1
S[t] ← o
Trang 11Performance and Limitations"
– Let n be the number of elements in the stack!
– The space used is O(n)!
– Each operation runs in time O(1)
• Limitations!
priori and cannot be changed!
– Trying to push a new element into a full stack
causes an implementation-specific exception!
Trang 12Array-based Stack in Java"
// holds the stack elements
// index to top element
Object temp = S[top];
// facilitates garbage collection S[top] = null ;
top = top – 1;
}
Trang 13Stack with a Singly Linked
List"
• We can implement a stack with a singly linked list!
• The top element is stored at the first node of the list!
Stack ADT takes O(1) time !
∅
t
nodes
elements
Trang 15Parentheses 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 match
Let S be an empty stack
return false {nothing to match with}
if S.pop() does not match the type of X[i] then
return false {wrong type}
Trang 16<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>
Trang 17Computing Spans"
as an auxiliary data structure
in an algorithm!
• Given an an array X, the span
S[i] of X[i] is the maximum
Trang 18Quadratic Algorithm"
Algorithm spans1(X, n)
Input array X of n integers
Output array S of spans of X #
S ← new array of n integers n
Trang 19Computing Spans with a
Stack"
• We keep in a stack the
indices of the elements
visible when “looking
back”!
left to right!
– Let i be the current index
– We pop indices from the
stack until we find index j
such that X[i] < X[j]
– We set S[i] ← i - j!
– We push i onto the stack!
Trang 20Linear Algorithm"
Algorithm spans2(X, n) #
S ← new array of n integers n
A ← new empty stack 1
n Is pushed into the
stack exactly one
Trang 21Queues"
Trang 22The Queue ADT"
• The Queue ADT stores arbitrary
objects!
• Insertions and deletions follow
the first-in first-out scheme!
• Insertions are at the rear of the
queue and removals are at the
front of the queue!
• Main queue operations:!
– enqueue(object): inserts an
element at the end of the queue!
– object dequeue(): removes and
returns the element at the front
of the queue!
• Auxiliary queue operations:!
– object front(): returns the element at the front without removing it!
– integer size(): returns the number of elements stored! – boolean isEmpty(): indicates whether no elements are stored!
Trang 24Applications of Queues"
– Waiting lists, bureaucracy!
– Access to shared resources (e.g., printer)!
– Auxiliary data structure for algorithms!
Trang 25Array-based Queue"
• Use an array of size N in a circular fashion!
• Two variables keep track of the front and rear!
f ! index of the front element!
r ! index immediately past the rear element!
• Array location r is kept empty!
Trang 27Queue Operations (cont.)"
Algorithm enqueue(o)
if size() = N - 1 then throw FullQueueException
Trang 28Queue Operations (cont.)"
Trang 29Queue Interface in Java"
built-in Java class
public interface Queue { public int size();
public boolean isEmpty();
public Object front() throws EmptyQueueException;
public void enqueue(Object o);
public Object dequeue() throws EmptyQueueException;
}
Trang 30Queue with a Singly Linked
List"
– The front element is stored at the first node!
– The rear element is stored at the last node!
Queue ADT takes O(1) time!
Trang 31Application: Round Robin
Schedulers"
queue, Q, by repeatedly performing the following
1 Deque the next element
3 Enqueue the serviced element
2 Service the next element
Trang 32Sequence ADT"
union of the Vector and
– atRank(r), rankOf(p)!
Trang 33Applications of Sequences"
general-purpose, data structure for storing an ordered collection of elements!
Trang 34Linked List Implementation"
• A doubly linked list provides a
reasonable implementation of the
Sequence ADT!
• Nodes implement Position and store:!
– element!
– link to the previous node!
– link to the next node!
• Special trailer and header nodes!
Trang 35S
Trang 36Sequence Implementations"