Description Data structures serve as a foundation upon which many other computer science fields are built. Thus,some knowledge of data structures is a prerequisite for students who wish to work in the design, implementation, testing, or maintenance of virtually any software systems. The Java language, an object-oriented descendant of C and C++, has gained popularity in industry and academia as an excellent programming language due to widespread use of the Internet. Thus, the use of Java to teach a data and algorithms course is well justified. Key Features A section on treaps (6.10) NEW! A section on k-d tress (6.11) NEW! A section on k-d B-trees (7.1.5) NEW! A section on generational garbage collection (12.3.4) NEW! Emphasizes the connection between data structures and their algorithms, with an analysis of the algorithms complexity Presents data structures in the context of object-oriented program design Illustrates the complete context in which certain algorithms and data structures can be used through case studies Examines the efficiency of algorithms with theoretical analysis, with suggestions to improve them Simplifies the understanding of recursion by considering run-time stacks together with the algorithms TABLE OF CONTENTS Preface. About the Author. 1. Object-Oriented Programming Using Java. 2. Complexity Analysis. 3. Linked Lists. 4. Stacks and Queues. 5. Recursion. 6. Binary Trees. 7. Multiway Trees. 8. Graphs 9. Sorting. 10. Hashing. 11. Data Compression. 12. Memory Management. 13. String Matching. Appendix A Computing Big-O. Appendix B NP-Completeness. Name and Subject Indexes.