Some of these problems can be done in varying levels of detail. The more work you do, and the more aspects of the problem you explore, the more impressed I'll be and the more credit you'll get.
You are given a list of points in a plane, each specified by an (x,y) coordinate pair, and you want to know whether there is a single circle that they're all on. (Don't worry about "close enough"; you may assume for this problem that your floating-point numbers are infinitely accurate.) Describe an algorithm in pseudocode to solve this problem. Analyze it: tell how long it takes, as a function of the number of points.
Let's write some standard algorithm -- say, an insertion sort -- for several different implementations of the List ADT. (Which is not necessarily what's in Shaffer, p. 96: I would separate the notion of a "current position" from the list, and I would probably move the "insert", "remove", and "clear" methods into a MutableList sub-interface....) In all five cases, define a class to represent a list of Strings, with suitable constructors, toString() methods, implementations of some basic operations, and an insertion sort to demonstrate that it all works.
The five implementations:
Get all of these to work. Discuss the pros and cons of the various implementations. What kinds of problems would be easier to do in one implementation than another?