Data Structures and Abstractions with Java, 5/E, Carrano & Henry ISBN-10: 0-13-483169-1 — ISBN-13: 978-0-13-483169-5 |
I know this text is quite expensive … any recent edition should be OK, though in that situation the section and chapter references below may be a bit off. I believe there?s a rental or online option, and those are fine as well. But here is the important thing … my lecture notes are the final word on anything … i.e., if I don't present a topic in the notes or in class, you're not responsible for it. Furthermore, I do not assign programs or homework from the text. However, the book can act as a second source of information for you, and many students find it helpful to have something other than the instructor's lecture notes, and as far as the data structures texts out there, this is one of the best for a course at this level. If you can afford any sort of copy of this text, I would recommend you getting it.
As mentioned above, the course is driven by my lecture notes, and the corresponding sections of the text are all over the place. However, it is a highly readable text, and you should have no problem reading an introduction section of a later chapter. The text's approach towards data structures is similar to my own, and it can therefore serve as a valuable reference to read up on much of the material covered.
Supplement 1 — Java Basics
You should be familiar with just about everything here with the following exceptions:
StringBuilder
StringBuffer
class. Both of these are often used as an alternative to
the String
class.
Scanner
to Extract Pieces of a String
Scanner
class.
=
and ==
with Arrays
Supplement 2 — File Input and Output
Appendix A
This chapter covers program documentation — a topic probably discussed in 1115 and 3115. You can ignore the Java Documentation Comments section though you should probably be able to understand them …; we may cover javadoc at some point.
Appendix B
You should have covered all the material in this Appendix, most likely in 3115.
Appendix C
The core concepts of this Appendix — composition and inheritance — are central to class design in general, and data structures in particular. We will be discussing, comparing, and contrasting them on a regular basis.
Prelude — Designing Classes
This chapter covers the basics of designing classes, a process more abstract (and sophisticated) than the basic mechanics of class definitions. The ideas presented lead to the notion of 'programming to the interface, not the class' that we will cover after our introduction to the classic containers.
Despite my pointing out sections you can skip, as somewhat-experienced Java programmers, there is no reason you shouldn't be able to read all of the above secitions … feel free to come to class with questions. If I think they're relevant to our discussions, I will elaborate on them in class; if not, I will be happy to answer them offline.
Introduction - Organizing Data
This introductory chapter introduces much of the basic terminology and concepts: abstract data type (ADT, data structure, collection as well as the names and fundametnal properties of the classical containers.
Chapter 1 — Bags
Chapter 5 — Stacks
Chapter 7 — Queues, Deques, and Priority Queues
Chapter 10 — Lists
Chapter 20 — Dictionaries
Chapter 2 — Bag Implementations That Use Arrays
The entire chapter is fair reading.
As discussed above, the variations we presented focused on using pointers to the ends of the containers, in an attempt to avoid the shifting requiring in opening an closing a gap in the underlying array. This made sense for sequences that were restricted to the ends of the containers: stack, FIFO queue and deque. List supports insertion/removal operations within the list proper, and thus do not benefit from end pointers. Similarly, priority queue and all the associatives — including bag — have operations whose semantics are dependent on the values of the elements, rather than their positions; their (primary) challenge is not that sort of insertion/removal but rather how to find particular elements either without explicit sorting, or find an efficient sorting method.
Despite this, Chapter 2 addresses the issue of implementing bag using an array. This is because the book's approach is to start with what they consider a fundamental data structure — the bag — and discuss implementations using a familiar facility — the array. In some respects, the chapter is a good one to read in that it presents many of the reasons for not using a bag that we have discussed; but it also discusses memory management (resizing).
Chapter 6 — Stack Implementations
Vector
(an equivalent, older version of ArrayList
) world. You are not responsible for that yet, though it's not that different then our use of ArrayArray
.
Chapter 8 — Queue, Deque, and Priority Queue Implementations