xii Preface The remainder of the book relies on informal specifications and proofs.This section and the bibliographic notes at the end of chapter 3 are intended as a guide for more interested readers,should they wish to explore the topic more rigorously;therefore it may be skipped in its entirety or on the first reading. Chapters 3 to 7 then discuss a variety of abstract data types including stacks, queues,lists,sets,trees,relations and graphs.Each abstract data type is defined as a mathematical model with a number of operations defined on that model. The operations are given as a set of Pascal procedures and functions.Various implementation strategies of these data types are discussed in terms of Pascal constructs.Examples of applications of these abstract data types are also given. Part II further describes many algorithms and common techniques for deve. loping efficient algorithms using abstract data types.Programming paradigms such as divide and conquer,dynamic programming,graph searching,tabulation techniques and randomised algorithms,are discussed.Chapter 9 develops a divide and conquer algorithm for the sorting problem and it is shown how implemen- tation considerations are delayed until the final stage of program design.Finally, it is emphasised that these algorithm design techniques are not universal tools for producing efficient algorithms for all problems.In particular,chapter 12 briefly discusses the class of 'hard'problems for which most algorithms are not very efficient.A few techniques are described,such as how to handle such inherently difficult problems. Exercises and Assignments Computer programming can only really be learnt through experience.Merely reading about it is no substitute for first-hand practical experience.Therefore, to reinforce the ideas,exercises are included at the end of each chapter.These are usually simple and can be tackled after the content of the chapter is well understood.Some involve verifying algorithms by checking them manually on paper,while others require the writing of programs or fragments of programs. Guidance on the solutions of selected exercises is provided at the end of the book.Since the emphasis of the book is on the efficient implementation of various abstract data types and the comparison of algorithms,a few practical assignments are also included among the exercises.These take the form of designing,writing and testing actual programs.A few guidelines on the design of data types and algorithms for these assignments are given in the solutions to exercises. Bibliographic Notes and Further Reading No book of this size can deal comprehensively with abstract data types,data structures,algorithm design and the theory and practice of programming with data.However,the material presented here should provide an introduction to the practical issues of abstract data type and algorithm design.For motivated