Progressing from the concrete to the abstract and using numerous, substantial case studies and sample programs this book explores structured problem solving, data abstraction, software engineering principles, and the comparative analysis of algorithms as fundamental tools of program design.