The authors intend this nice book primarily for a one-semester course that fulfills the ACM core curriculum requirements for CS2. With all of the content demands placed on the CS2 course and the differing views of how to teach it, the beauty of this text lies in its balanced approach. It will probably not be considered suitable for CS2 by those who advocate a more rigorous, theoretical approach to the study of algorithms and data structures. The book represents a major step away from the overemphasis on code, complex algorithms, and data structures that characterizes a number of texts of this genre. But it contains enough code, for better or worse still in Pascal, to illustrate the main points of implementation.
The authors have taken a highly practical middle road to the second course presentation. Great pains are taken to explain the rudiments of software engineering and abstraction (chapters 1 and 4, 80 pages). The authors consistently emphasize abstraction and encourage students to think about what their programs and program components are supposed to do. Function and procedure preconditions and postconditions and loop invariants are illustrated throughout.
Case study problems are clearly partitioned, and excellent diagrams illustrate the basic ideas underlying each algorithm. The text discussion and layout and the style of the code are nonthreatening and pleasing to the eye. Even the most ordinary computer science student will have no excuse for not reading this book carefully and understanding the concepts presented.
The text covers structures from linked lists, tables, stacks, and queues to trees, priority queues and heaps, and graphs, and even presents some approaches to handling external data files. Its wealth of special features include self-test exercises with answers and additional exercises and projects for homework. Case studies are used to illustrate completely solved problems. The authors provide an instructor’s guide and a diskette containing all of the programs appearing in the book. They make suggestions about how instructors and students can match their own teaching and learning objectives to the order and emphasis of the material in the text.
This book should be a welcome addition to the libraries of students and teachers alike.