This volume explores top-down structured problem solving, the process of data abstraction and structuring, and the comparative study of algorithms as fundamental tools of program design. The new edition uses a concrete and practical approach - beginning with simple motivating examples and progressing to general principles, and takes special care in the formulation of ideas into algorithms and in the refinement of algorithms into concrete programs that can be applied to practical problems. It also covers the process of data specification and abstraction before the section of data structures and their implementation, and contains many sample programs worked out in detail - both short procedures and complete programs of substantial length - to show how all tools are used together to build complete programs of realistic size. Programs are rewritten to make more of reusable code, packages for various task and data abstraction, and Turbo Pascal is used, with strong use of units, as the programming language dialect throughout - with explanations where needed on how to convert to standard Pascal. The work develops several additional large sample programs in the text and includes large programming projects partially developed in the text. It also offers a thorough treatment of recursion - including a range of its applications, and criteria to determine when recursion is appropriate and when it should be avoided, and contains new material on various kinds of search trees. The text simplifies the treatment of lists and contains sections of pointers and pitfalls and marginal notes throughout.