Much of current programming practice is basically empirical and ad hoc in approach. Each problem is tackled without relation to those that have gone before; experiences are made and stored as a series of fragments. Now, under the pressure of events, this unsatisfactory state of affairs is coming to an end. Programming is becoming a technology, a theory known as structured programming is developing. The purpose of a theory is to categorise and explain existing practice, thus enabling it to be improved through the development of new and sharper techniques. The resulting experiences have then to be fed back into the theory so that the process of enrichment may continue. This dialectical relationship between theory and practice is essential to a healthy programming technology. The lack of such a relationship in the 1950s and 60s and the accompanying software crisis certainly confirm the converse of this proposition. My aim in writing this book has been to explain the current state of the theory of structured programming, so that it may be used to improve the reader's practice. The book deals with two facets of programming - how to design a program in terms of abstract data structures and how to represent the data structures on real and bounded computers. The separation between program design and data structure representation leads to more reliable and flexible programs. Front Matter....Pages i-xi An Overview of Program Design....Pages 1-5 Program Design Notation....Pages 6-20 Arrays....Pages 21-26 Simple Data Structuring....Pages 27-35 On Program Design....Pages 36-48 Front Matter....Pages 49-52 Set Structures....Pages 53-65 The Class Construct....Pages 66-79 Dynamic Data Structures....Pages 80-94 Sequences....Pages 95-112 Front Matter....Pages 113-115 Simple Searching Techniques....Pages 116-127 Hashing Techniques....Pages 128-140 Recursion and Recursive Algorithms....Pages 141-157 Binary Search Trees....Pages 158-180 Front Matter....Pages 181-186 Designing Programs from Data Structures....Pages 187-209 Exercises 4....Pages 210-216 Back Matter....Pages 217-222 1. An Overview of Program Design.- 1.1 Introduction - The Software Crisis.- 1.2 Objectives of Program Design.- 1.3 The Heart of the Problem.- 1.4 Stepwise Refinement.- 1.5 What Do We Mean When We Say a Program 'Works'?.- 1.6 Summary.- 1.7 Bibliographical Notes.- 2. Program Design Notation.- 2.1 An Abstract Programming Language.- 2.2 Structuring Control.- 2.3 Structuring Data.- 2.4 What is a Data Structure?.- 2.5 Unstructured Data Types.- 2.6 Implementation of Unstructured Types.- 2.7 Summary.- 2.8 Bibliographical Notes.- 3. Arrays.- 3.1 Array Structures.- 3.2 Arrays and Functions.- 3.3 Impleme