Data Structures and Algorithms
with Object-Oriented Design Patterns in C++
-
The array-based stack implementation
shown in Programs , , and
uses a fixed length array.
As a result, it is possible for the stack to become full.
However, the Array<T> class defined in Chapter
provides a SetLength member function which can be used
to change the length of the array.
-
Rewrite the Push routine so that it doubles
the length of the array when the array is full.
-
Rewrite the Pop routine so that it halves
the length of the array when the array is less than half full.
-
Show that the average time for both push and pop
operations is O(1).
Hint: Consider the running time required to
push items onto an empty stack, where .
-
Consider a sequence S of push and pop operations
performed on a stack that is initially empty.
The sequence S is a valid sequence of operations if
at no point is a pop operation attempted on an empty stack
and if the stack is empty at the end of the sequence.
Design a set of rules for generating a valid sequence.
-
Devise an implementation of the Queue
abstract data type using two stacks.
Give algorithms for the Enqueue and Dequeue operations,
and derive tight big-oh expressions for the running times
of your implementation.
-
Write each of the following infix expressions
in postfix notation:
- ,
- ,
- ,
- ,
- , and
- .
-
Write each of the following postfix expressions
in infix notation:
- ,
- ,
- ,
- ,
- , and
- .
-
Devise an algorithm which translates a postfix expression
to a prefix expression.
Hint: Use a stack of strings.
-
The array-based queue implementation
shown in Programs , and
uses a fixed length array.
As a result, it is possible for the queue to become full.
-
Rewrite the Enqueue routine so that it doubles
the length of the array when the array is full.
-
Rewrite the Dequeue routine so that it halves
the length of the array when the array is less than half full.
-
Show that the average time for both enqueue and dequeue
operations is O(1).
-
Stacks and queues can be viewed as special cases of deques.
Show how all the operations on stacks and queues
can be mapped to operations on a deque.
Discuss the merits of using a deque to implement a stack or a queue.
-
Suppose we add a new operation to the stack ADT
called FindMinimum
that returns a reference to the smallest element in the stack.
Show that is its possible to provide an implementation
for FindMinimum that has a worst case running time of O(1).
-
The breadth-first traversal routine shown in Program
visits the nodes of a tree in the order of their levels in the tree.
Modify the algorithm so that the nodes are visited in reverse.
Hint: Use a stack.
Copyright © 1997 by Bruno R. Preiss, P.Eng. All rights reserved.