CISC 3130
Data Structures
Recommended Text & Topic Readings


Text

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.


Readings From the Text

Review — Topics You Should Know from 1115 and 3115

The corresponding sections of our review and preliminaries lecture is quite extensive as the text has numerous Interludes, Supplements, and Appendicesi intended to introduce the reader to material and topics you have already covered in 1115 and 3115. (They are probably included in the textto allow non-Javans to use it for a Data Structures course, and also as many schools go directly from a one semester intro to Data Structures, deferring many of these topics for the latter course.) Most of this material is a review — but a good one — for you, and you should be able to skim the sections below and find much familiar material. I will discuss any new material as the topics become relevant.

Supplement 1 — Java Basics

You should be familiar with just about everything here with the following exceptions:

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.


Lecture 01 — Preliminaries

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.


Lecture 02 — Introduction to Containers

This lecture jumps all over the book to the various introductory sections of the containers. I'm also using much simpler sets of operations, though the ones they add are straightforward, and presenting the collections in a different order than the text.

Chapter 1 — Bags

Chapter 5 — Stacks

Chapter 7 — Queues, Deques, and Priority Queues

Chapter 10 — Lists

Chapter 20 — Dictionaries


Container Variations

Like the previous lecture, this one also jumps around the text, this time examining the various array implementations of sequences. Unlike our simple implementation where delegation/leveraging is heavily used, the implementations presented in the text are of the 'independent' variety discussed in the lecture, i.e., self-contained, focusing on the optimal use of pointers to the various ends of the sequences, and abstracting the linear array into a circular one.

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

Chapter 8 — Queue, Deque, and Priority Queue Implementations