The Future of Data Structures

Dick Hull
Department of Computing Sciences
Lenoir-Rhyne College
Hickory, NC

The problem of content in a data structures (CS2) course is quite dependent upon an understanding of just what is "Computer Science" today, and where is it going? Computer use has entered so many fields in recent years, with many different levels of expertise required, that the distinction between Computer Science majors and other computer users has become more and more blurred. When a technology is new, those who work with it often need to have an intimate knowledge of the inner workings to use it successfully. As the same technology develops, layers of abstraction are added and the user is distanced from the internal details. Fewer people (but still a positive number) need to know the details - are these the "Computer Science" majors? - while many others can build very sophisticated programs from components supplied by others. Even computer "manufacturers" now sell systems completely constructed out of parts, boards, etc., supplied by external companies. Still, someone does have to design and build those components.

We must teach both approaches to data structures - the design and the use. Students coming out of CS1 should have a fairly complete introduction to control structures and how to use them. In CS2 we should introduce data structures as another tool for building programs, and perhaps concentrate on the use of library classes/packages as plug-in components to be incorporated into programs. And while I believe the use of abstraction is vastly important here, and I try to convince my students to see beyond any implementation to the abstract concepts, I do feel that some examples of the implementation of library units are valuable when introducing these ideas to freshman students. In CS2 I would certainly include stacks and queues, binary trees, and perhaps some others. I would also provide libraries containing strings, balking queues, priority queues, B-trees, etc., to be used without full implementation details. (The problem here is to provide such libraries without showing the student the implementation code. Some languages permit this real "information hiding", while others just hide the details from other program modules, but not from the human working on the program.)

Once the use of advanced data structures has been taught, along with the implementation of a few simple ones, we can move on to the question of designing, implementing, and evaluating the libraries. This would seem to be the purview of a course that combined program design with algorithm analysis, and may fit in the place formerly held by CS7 several years ago. But the situation is continually evolving. The question of how far to carry out the expansion of abstractions in this third course will change over the years. We must keep looking at the problem, evaluating the alternatives, and updating our degree programs and offerings to keep up with that evolution.