Preface This book is intended as a second course on programming with data structures. The concepts of 'data structures'and their impact on design and efficiency of computer algorithms are well established and well studied.For instance,see the authoritative text by D.E.Knuth,The Art of Computer Programming (Knuth, 1973),and The Design and Analysis of Computer Algorithms by A.V.Aho, J.E.Hopcroft and J.O.Ullman (Aho et al.,1974).Because of their long stand- ing history,'data structures'and their role in program design are well understood, and in the last decade or so,numerous textbooks have appeared in this field.For instance,see Baron and Shapiro (1980),Aho et al.(1974),Gotlieb and Gotlieb (1978),Stubbs and Webre (1985),Reingold and Hansen (1983),Korsh (1986), Wirth (1976)and Martin (1986). However,following general design methods based on high-level abstraction of systems (computer systems,engineering systems,etc.)and their modular decom- positions,'data structures'have also been studied in this modular framework. The approach taken is based on the notion of an Abstract Data Type which is defined as an abstract mathematical model with a defined set of operations.The treatment of abstract data types is very informal.The specification of data types and their corresponding operations are presented in a form directly representable in a Pascal-like language. The textbook Data Structures and Algorithms by A.V.Aho,J.E.Hopcroft and J.D.Ullman (Aho et al.,1983)is a pioneering work incorporating the notion of abstraction in the design of data structures.Other texts following a similar approach have appeared:Stubbs and Webre (1985),Wirth (1986)and Martin (1986).This book follows the same general principles as the above,in particular, Aho et.al.(1983)in describing data abstractions in languages such as Pascal. However,the material and programs are more structured and relationships between ADTs and implementations are made more clear. The primary advantage gained by using abstract data types in program design is that they lead to better structured and modular programs.This type of modu- larity ensures that logical tasks and data are grouped together to form an inde- pendent module whose functional specification is visible to other programs using it.These application programs do not require detailed information on how the tasks and data are realised in computer hardware.Thus various strategies may be used to implement a module's data types and operations so far as they conform to the specification of that module.This separation of specification and imple- mentation of programs ensure that many design decisions,such as efficiency, trade-offs between speed and storage etc.,can be made at a later stage when the