Data Structures and Abstractions with Java

Brief Table of Contents

Introduction Organizing Data

Prelude Designing Classes

Chapter 1 Bags

Java Interlude 1 Generics

Chapter 2 Bag Implementations That Use Arrays

Java Interlude 2 Exceptions

Chapter 3 A Bag Implementation That Links Data

Chapter 4 The Efficiency of Algorithms

Chapter 5 Stacks

Chapter 6 Stack Implementations

Java Interlude 3 More About Exceptions

Chapter 7 Queues, Deques, and Priority Queues

Chapter 8 Queue, Deque, and Priority Queue Implementations

Chapter 9 Recursion

Chapter 10 Lists

Chapter 11 A List Implementation That Uses an Array

Chapter 12 A List Implementation That Links Data

Java Interlude 4 Iterators

Chapter 13 Iterators for the ADT List

Chapter 14 Problem Solving With Recursion

Java Interlude 5 More About Generics

Chapter 15 An Introduction to Sorting

Chapter 16 Faster Sorting Methods

Java Interlude 6 Mutable and Immutable Objects

Chapter 17 Sorted Lists

Java Interlude 7 Inheritance and Polymorphism

Chapter 18 Inheritance and Lists

Chapter 19 Searching

Java Interlude 8 Generics Once Again

Chapter 20 Dictionaries

Chapter 21 Dictionary Implementations

Chapter 22 Introducing Hashing

Chapter 23 Hashing as a Dictionary Implementation

Chapter 24 Trees

Chapter 25 Tree Implementations

Java Interlude 9 Cloning

Chapter 26 A Binary Search Tree Implementation

Chapter 27 A Heap Implementation

Chapter 28 Balanced Search Trees

Chapter 29 Graphs

Chapter 30 Graph Implementations

Appendices

Appendix A Documentation and Programming Style

Appendix B Java Classes

Appendix C Creating Classes from Other Classes

Online Supplements

Supplement 1 Java Basics

Supplement 2 File Input and Output

Supplement 3 Glossary

Supplement 4 Answers to Study Questions