Using C, this book develops the concepts and theory of data structures and algorithm analysis step by step, proceeding from concrete examples to abstract principles. The material is unified by the use of recurring themes such as efficiency, recursion, representation and trade-offs. Important software engineering concepts are also covered, including modularity, abstract data types and information hiding, as well as new developments such as risk-based software, life cycle models and object-oriented programming.