Preface | Data Structure | Object Oriented Programming

Data Structures and Algorithms in Java

Third Edition

.

Goodrich Department of Computer Science University of California. New York • Chichester • Weinheim • Brisbane • Singapore • Toronto . Irvine Roberto Tamassia Department of Computer Science Brown University John Wiley & Sons. Inc.Data Structures and Algorithms in Java Third Edition Michael T.

except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act. fax (978)750-4470. E-Mail: PERMREQ@WILEY.. ∞ Trademark Acknowledgments: Java is a trademark of Sun Microsystems. photocopying.ACQUISITIONS EDITOR ASSOCIATE MARKETING DIRECTOR EDITORIAL ASSISTANT SENIOR PRODUCTION EDITOR COVER DESIGNER Paul Crockett Ilse Wolfe Simon Durkin Ken Santor David Levy About the cover: Anatjari Tjampitjinpa.” 1988. Hoboken. fax (201)748-6008. (978)750-8400. 222 Rosewood Drive. electronic. To order books or for customer service please call 1-800-CALL WILEY (225-5945). ISBN 0-471-46983-1 Printed in the United States of America 10 9 8 7 6 5 4 3 2 1 . This book is printed on acid free paper. MA 01923. Copyright c 2004. scanning or otherwise. Reproduced courtesy of Patrick Corbally Stourton of Corbally Stourton Contemporary Art Ltd. licensed through X/Open Company. stored in a retrieval system or transmitted in any form or by any means. recording. Ltd. Inc. (201)748-6011. No part of this publication may be reproduced. or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center. All other product names mentioned herein are the trademarks of their respective owners. Inc. Inc. John Wiley & Sons. Powerpoint R is a trademark of Microsoft Corporation. 111 River Street. mechanical. Requests to the Publisher for permission should be addressed to the Permissions Department. Inc. UNIX R is a registered trademark in the United States and other countries. Inc. without either the prior written permission of the Publisher.COM. A This book was set in LTEX by the authors and printed and bound by Von Hoffmann. “Snake Dreaming. NJ 07030. John Wiley & Sons. All rights reserved. Inc. The cover was printed by Von Hoffmann. Danvers.

Goodrich To Isabel – Roberto Tamassia .To Karen. and Jack – Michael T. Anna. Paul.

.

Goodrich. Goodrich and R. it could make for a handy companion book in a curriculum that allows for either a Java or C++ track in the introductory courses. This book has a similar overall structure to the present book. Tamassia. analysis. Data Structures and Algorithms in C++. we have written this book to be primarily for Freshman-Sophomore level data structures courses. CS103 (I/O/B versions). Algorithm Design: Foundations. including their design. this book is appropriate for use in the courses CS102 (I/O/B versions). This is a textbook for a more advanced algorithms and data structures course.T. with respect to the second edition. and Internet Examples. 2002. The major changes. 2004. Mount. In terms of curricula based on the 1978 ACM Computer Science Curriculum. • M.. Tamassia. vii . and CS112 (A/I/O/F/H versions). Inc. In terms of curricula based on the IEEE/ACM 2001 Computing Curriculum. such as CS7 in the ACM 1978 curriculum or CS210 (T/W/C/S versions) in the IEEE/ACM 2001 curriculum. Inc. John Wiley & Sons. This book is related to the following books: • M. but necessary pedagogical differences required by this approach).Preface to the Third Edition This third edition is designed to provide an introduction to data structures and algorithms.T. We discuss its use for such courses in more detail later in this preface. are the following: • • • • • • • • • • • Expanded coverage of recursion Streamlined mathematics to the seven most used functions Inclusion of HTML tag matching and favorites list applications Simplification of the Java interfaces associated with ADTs Better integration with the Java Collections Framework Simplified binary tree and priority queue ADTs Addition of the map ADT Addition of splay trees Addition of the union/find partition data structure Simplified graph ADT Expanded and revised exercises.M. CS111 (A version). and D. Analysis. With respect to computer science and computer engineering curricula. John Wiley & Sons. Thus. and implementation. but uses C++ as the underlying language (with some modest. this book is intended for the CS2 course.. R.

Typically. and objects. the introductory courses are presented as a two. This package forms a coherent library of data structures and algorithms in Java specifically designed for educational purposes in a way that is complementary with the Java Collections Framework. Elementary data structures are often briefly introduced in the first programming or introduction to computer science course and this is followed by a more in-depth introduction to data structures in the following course(s). Also.net. databases. we think of data as instances of an abstract data type (ADT) that includes a repertory of methods for performing operations on the data. for the study of data structures is part of the core of every collegiate computer science and computer engineering major program we are familiar with. we provide an associated Java interface. including the Web. object-oriented solutions are often organized utilizing common design patterns.datastructures. rather than simply viewing data as a collection of bytes and addresses. Thus. The Java code in this the book implementing fundamental data structures is organized in a single Java package. We also give Java implementations of fundamental algorithms (such as sorting and graph traversals) and of sample applications of data structures (such as HTML tag matching and a photo album). this course sequence is typically followed at a later point in the curriculum by a more in-depth study of data structures and algorithms. we sometimes show only code fragments in the book and make the full source code available on the companion Web site http://java. and scientific simulation systems. which facilitate software reuse and robustness. we have tried to take a consistent objectoriented viewpoint throughout this text.viii Preface Use as a Textbook The design and analysis of efficient data structures has long been recognized as a vital subject in computing.datastructures. concrete data structures realizing the ADTs are provided as Java classes implementing the above interfaces. Likewise. . methods. Due to space limitations. Furthermore. compilers. That is. We feel that the central role of data structure design and analysis in the curriculum is fully justified.or threecourse sequence. For each ADT presented in this book. One of the main ideas of the objectoriented approach is that data should be presented as being encapsulated with the methods that access and modify them. operating systems. net. With the emergence of the object-oriented paradigm as the framework of choice for building robust and reusable software. we present each data structure using ADTs and their respective implementations and we introduce important design patterns as means to organize those implementations into classes. given the importance of efficient data structures in most software systems.

since they allow readers to interactively “play” with different data structures. which leads to better understanding of the different ADTs.datastructures package Slide handouts (four-per-page) in PDF format A database of hints to all exercises. so as to allow an instructor using this book full freedom in customizing his or her presentations. Instructors are likewise welcome to use the site to help plan. For the Instructor For instructors using this book.Preface ix Web Added-Value Education This book is accompanied by an extensive Web site: http://java. organize. including discussions on convex hulls. For the Student For all readers. We feel that the Java animations and interactive applets should be of particular interest. we include the following additional teaching aids: • • • • • • Solutions to over two hundred of the book’s exercises A keyword-searchable database of additional exercises The complete net. and orthogonal segment intersection. the hints should be of considerable use to anyone needing a little help getting started on certain exercises. we include: • • • • • • All the Java source code presented in this book The student version of the net.net Students are encouraged to use this site along with the book. The slides are fully editable.datastructures. In addition. and specifically for students. indexed by problem number Java animations and interactive applets for data structures and algorithms Hyperlinks to other data structures and algorithms resources. .datastructures package Additional Java source code Slides in Powerpoint and PDF (one-per-page) format Self-contained special-topic supplements. and present their course materials. range trees. to help with exercises and increase understanding of the subject.

2. which are divided into roughly 40% reinforcement exercises.5. 12.5.4 Sections 1. CS111 (A version).4. 6.6.2. 4.5. Fundamental Programming Constructs PF2. 9. Relation to the IEEE/ACM 2001 Computing Curriculum This book can be used for the CS2 course in the 1978 ACM Computer Science Curriculum or courses CS102 (I/O/B versions). with instructional units as outlined in Table 0.1. 12.3. & 12.3. 7.4 Sections 2.1. 5.1.3. & 12. & 10. Using APIs AL1.5.1. 10.2.4.1. 5.3.1.1.2. 6. and/or CS112 (A/I/O/F/H versions) in the IEEE/ACM 2001 Computing Curriculum. Object-Oriented Programming PF1. Recursion SE1. 11.3. Fundamental Computing Algorithms DS1.2.1. 10. 11. CS103 (I/O/B versions).3.5.3.1.1 Chapter 3 Sections 10.2. Overview of Programming Languages PL2.3. . 7.1: Material for Units in the IEEE/ACM 2001 Computing Curriculum.3. 2.3 & 10.1. 4. & 3. & 12. Declarations and Types PL5.3.x Preface For the Instructor This book contains many Java-code and pseudo-code fragments.1 Chapters 1 & 2 Sections 1. 5.2.1.5 Chapters 6.3. & 11.3.7.1. 4. 6. & 12 Appendix A and Sections 8. 5. & 2. 6. Functions.2. 6.4. 3.5. 6. Basic Algorithmic Analysis AL2.4. 5. 9.2.2.9.1.5.1–5.3.6.5.2. 6. and 20% programming projects.6. 7.1.5 Sections 2.2. 10. 7. 9. 8. 12. 7.4. 10. 4. Proof Techniques DS4.2.2.3.6.5.3.2. 4. 6.4 Section 1. 9.2 Sections 7.3.4.4. 8. 4. Fundamental Data Structures PF4.5. 6.3.1–9. 5. Graphs and Trees DS6.2–4.5.1. Introduction to Language Translation PL4.1 Chapter 2 and Sections 5. Virtual Machines PL3. & 12 Sections 3. 7. 8.6 Sections 3. & 12.3. Abstraction Mechanisms PL6. 7.4.1. 5.1.3. Instructional Unit PL1.1. 7.4.3. 2. and Chapters 10. 5. & 12.5. & 10. & 12.1. 5. 10.2.1 & 4.2 Sections 2.1.2.3.2. 4. 7. .5. Algorithmic Strategies AL3. 12. & 8. 40% creativity exercises.2.3.4. 4. Basics of Counting DS5. 7.1.1.1. Algorithms and Problem-Solving PF3. 5.1.1.1–8. 8. 5. and Sets DS3.9 Sections 1.5.3. 7. Discrete Probability Relevant Material Chapters 1 & 2 Sections 4.1. 9.1.7 Table 0.3. 10.3.4. & 12. 8.5.1 Sections 2. 5. 11. 4.4.3.4.2.4.1 Chapters 1 & 2 and Sections 5.3.2. Software Design SE2.2. 9. 10.1.2. 6.3.2.4.1. 8. and over six hundred exercises. 8.1.3. Relations.4.1.

Analysis Tools 4.2: Options for a Freshman-Sophomore data structures course. we illustrate some possible uses of this book for an intermediate-paced data structures course. Prerequisites We have written this book assuming that the reader comes to it with certain knowledge. Nevertheless. That is. Still. such as linked lists. compression.Preface xi Teaching Options This book is also structured to allow instructors a great deal of freedom in organizing and presenting the material. we assume that the reader is at least vaguely familiar with a high-level programming language. it does not provide a comprehensive treatment of Java. . Chapter 1. we provide a primer on the Java language in Chapter 1. Maps and Dictionaries 9. C++. Priority Queues 8. including: • • • • Variables and expressions Methods (also known as functions or procedures) Decision structures (such as if-statements and switch-statements) Iteration structures (for-loops and while-loops). Queues & Recursion 5. For readers who are familiar with these concepts. but not with how they are expressed in Java.4) and red-black trees or splay trees omit sorting lower bound omit tries. Text Processing 12. Search Trees 10. and Selection 11. and/or LCS omit directed graphs or MSTs Table 0. we do not assume that the reader is necessarily familiar with object-oriented design or with linked structures. and Sequences 6. for these topics are covered in the core chapters of this book. Object-Oriented Design 3.2. and that he or she understands the main constructs from such a high-level language. Java Programming 2. Graphs Possible Options skip if students know it already omit the adapter pattern omit justification methods omit Java-thread queue application omit list iterators omit template method pattern omit bottom-up heap construction omit extensions of dictionaries omit (2. Lists. hence. this book is primarily a data structures book. such as C. Sorting. Trees 7. Sets. not a Java book. Vectors. Stacks. or Java. In Table 0.

teachers. In fact. he was a professor at Johns Hopkins University. we discuss the seven most-important functions for algorithm analysis. with special emphasis on algorithm visualization systems. Even so. Goodrich has taught data structures and algorithms courses. in Appendix A.net. the authors also have extensive experience in the classroom. with applications to Internet computing. Dr. They are also active in educational technology research. in Electrical and Computer Engineering from the University of Illinois at Urbana-Champaign in 1988. He has earned several teaching awards in this capacity. and the Defense Advanced Research Projects Agency. He previously served on the editorial board of IEEE Transactions on Computers. information visualization. supported by Drs. including elementary probability. Dr. having published many papers in this field. the Army Research Office. we assume the reader is somewhat familiar with topics from high-school mathematics. One thing that has set his teaching style apart is his effective use of interactive hypermedia presentations integrated with the Web. in Computer Science from Purdue University in 1987. datastructures. and are indicated with a star ( ). In addition to their research accomplishments.xii Preface In terms of mathematical background. Roberto Tamassia received his Ph.net and algorithmdesign. Michael Goodrich received his Ph. He is currently a professor in the Department of Computer Science at Brown University. . and geometric computing. For example. They have served as principal investigators in several joint projects sponsored by the National Science Foundation. He is currently a professor in the Department of Computer Science at University of California. His teaching style is to involve the students in lively interactive classroom sessions that bring out the intuition and insights behind data structuring and algorithmic techniques. We give a summary of other useful mathematical facts.D. in Chapter 3. The instructional Web sites. He is editorin-chief for the Journal of Graph Algorithms and Applications and an editor for Computational Geometry: Theory and Applications. He is an editor for the International Journal of Computational Geometry & Applications and Journal of Graph Algorithms and Applications. Tamassia has taught Data Structures and Algorithms as an introductory freshman-level course since 1988. sections that use something other than one of these seven functions are considered optional. Previously. About the Authors Professors Goodrich and Tamassia are well-recognized researchers in algorithms and data structures. Irvine.D. including Data Structures as a freshman-sophomore level course and Introduction to Algorithms as an upper level course. computer security. and professionals worldwide. Goodrich and Tamassia are used as reference material by students.

California Polytechnic State University.V. . Michael Horn. San Luis Obispo. and Scott Speigler developed a basic Java tutorial. Messiah College. Scott Smith and Ioannis Tollis for their insightful comments. University of Central Florida. University of Manitoba. Andy Schwerin. Laurent Michel. Michael Shapiro. Yi-Jen Chiang. Val Tannen. we would like to thank Jeff Achter. Robert Cohen. Mark Handy. University of Connecticut. Chris Ingram. Stevens Institute of Technology. Ken Slonneger. University of Iowa. University of Texas. which ultimately led to Chapter 1. and Christopher Wilson. Nikos Triandopoulos. Dan Polivy.1 and to several figures are gratefully acknowledged. Lubomir Bourdev. We are grateful to all our research collaborators and teaching assistants. contributions by David Mount to Section 2. We are particularly thankful to Karen Goodrich. C. Mike Demmer. Galina Shubina. Mark Handy. McGill University. University of Michigan. Natasha Gelfand. David Emory. who contributed to the development of the Java code examples in this book and to the design. Dartmouth College. Santa Barbara. University of Waterloo. emails. programming assignments. Washington University. Jody Fanto. Jovanna Ignatowicz. Bryan Cantrill. which were extremely useful in writing the third edition. John Mark Mercer. David Naumann. and constructive criticism. David Mount. Bobby Blumofe. Scott Drysdale. We specifically thank the following reviewers for their comments and suggestions: Divy Agarwal. Stina Bridgeman. University of California.Preface xiii Acknowledgments There are a number of individuals who have made contributions to this book. Robert Pastel. Devin Borland. Austin. Special thanks go to Eric Zamore. University of Maryland. Bina Ramamurthy. Benoˆt Hudson. Java Programming. Mike Boilen. There have been a number of friends and colleagues whose comments have lead to improvements in the text.datastructures library of data structures and algorithms in Java.5. Michael Clancy. Ravishankar. Art Moorshead. Paul Van Arragon. University of California. Susannah Raub. and algorithm animation systems. Michael Shin. Arup Guha. Ryan Baker. Michigan Technological University. Berkeley. University of Texas at Austin. Benjamin Boer. Leonard Myers. In particular. who provided feedback on early drafts of chapters and have helped us in developing exercises. Christian Straub. implementation and testing of the net. and Luca Vismara. Stan Kwasny. Larry Davis. We are also truly indebted to the outside reviewers and readers for their copious comments. Many students and instructors have used the two previous editions of this book and their experiences and responses have helped shape this third edition. SUNY Buffalo. Ashim Garg. James Baker. Seth Padowitz. Calvin Lin. In addition. ı James Piechota. Terry Andres. University of Pennsylvania. Lubomir Bourdev. Michael Horn. University of Oregon.

we would like to warmly thank Isabel Cruz.xiv Preface We are grateful to our editor. Simon Durkin. for his enthusiastic support of this project. We also thank them for reminding us that there are things in life beyond writing books. Paul Crockett. and Jeri Warner. The computing systems and excellent technical support staff in the departments of computer science at Brown University and University of California. Ioannis Tollis. Many thanks go to Lilian Brady. Franco Preparata. Goodrich Roberto Tamassia . Michael T. and our parents for providing advice. This manuscript was prepared primarily with A the LTEX typesetting package for the text and Adobe FrameMaker R and Microsoft Visio R for the figures. Giuseppe Di Battista. Irvine gave us reliable working environments. Finally. Ken Santor. Madelyn Lesure. The team at Wiley has been great. and support at various stages of the preparation of this book. Dawn Stanley. encouragement. Karen Goodrich.

Sign up to vote on this title
UsefulNot useful