Table of Contents

1.1 Data structures
1.2 Introduction to algorithms
1.3 Relation between data structures and algorithms
1.4 Abstract data types
1.5 Applications of ADTs
1.6 Algorithm efficiency

2.1 Searching and algorithms
2.2 Binary search
2.3 C++: Linear and binary search
2.4 Constant time operations
2.5 Growth of functions and complexity
2.6 O notation
2.7 Algorithm analysis
2.8 Recursive definitions
2.9 Recursive algorithms
2.10 Analyzing the time complexity of recursive algorithms

3.1 Sorting: Introduction
3.2 Selection sort
3.3 C++: Selection sort
3.4 Insertion sort
3.5 C++: Insertion sort
3.6 Shell sort
3.7 C++: Shell sort
3.8 Quicksort
3.9 C++: Quicksort
3.10 Merge sort
3.11 C++: Merge sort
3.12 Radix sort
3.13 C++: Radix sort
3.14 Overview of fast sorting algorithms
3.15 C++: Sorting with different operators

4.1 List abstract data type (ADT)
4.2 Singly-linked lists
4.3 Singly-linked lists: Insert
4.4 Singly-linked lists: Remove
4.5 Linked list search
4.6 C++: Singly-linked lists
4.7 Doubly-linked lists
4.8 Doubly-linked lists: Insert
4.9 Doubly-linked lists: Remove
4.10 C++: Doubly-linked lists
4.11 Linked list traversal
4.12 Sorting linked lists
4.13 C++: Sorting linked lists
4.14 Linked list dummy nodes
4.15 Linked lists: Recursion
4.16 Array-based lists
4.17 C++: Array-based list

5.1 Stack abstract data type (ADT)
5.2 Stacks using linked lists
5.3 C++: Array-based stacks
5.4 Queue abstract data type (ADT)
5.5 Queues using linked lists
5.6 C++: Array-based queues
5.7 C++: Stacks and queues using linked lists
5.8 Deque abstract data type (ADT)

6.1 Hash tables
6.2 Chaining
6.3 Linear probing
6.4 Quadratic probing
6.5 Double hashing
6.6 Hash table resizing
6.7 Common hash functions
6.8 Direct hashing
6.9 Hashing Algorithms: Cryptography, Password Hashing
6.10 C++: Hash tables

7.1 Binary trees
7.2 Applications of trees
7.3 Binary search trees
7.4 BST search algorithm
7.5 BST insert algorithm
7.6 BST remove algorithm
7.7 BST inorder traversal
7.8 BST height and insertion order
7.9 BST parent node pointers
7.10 BST: Recursion
7.11 Tries
7.12 C++: Binary search tree

8.1 AVL: A balanced tree
8.2 AVL rotations
8.3 AVL insertions
8.4 AVL removals
8.5 C++: AVL Trees
8.6 Red-black tree: A balanced tree
8.7 Red-black tree: Rotations
8.8 Red-black tree: Insertion
8.9 Red-black tree: Removal
8.10 C++: Red-black trees

9.1 Heaps
9.2 Heaps using arrays
9.3 C++: Heaps
9.4 Heap sort
9.5 C++: Heap sort
9.6 Priority queue abstract data type (ADT)
9.7 Treaps

10.1 Set abstract data type
10.2 Set operations
10.3 Static and dynamic set operations
10.4 C++: Set implementation

11.1 Graphs: Introduction
11.2 Applications of graphs
11.3 Graph representations: Adjacency lists
11.4 Graph representations: Adjacency matrices
11.5 Graphs: Breadth-first search
11.6 Graphs: Depth-first search
11.7 Directed graphs
11.8 Weighted graphs
11.9 C++: Graphs
11.10 C++: Breadth-first search
11.11 C++: Depth-first search
11.12 Algorithm: Dijkstra’s shortest path
11.13 C++: Dijkstra’s shortest path
11.14 Algorithm: Bellman-Ford’s shortest path
11.15 C++: Bellman-Ford’s shortest path
11.16 Topological sort
11.17 C++: Topological sort
11.18 Minimum spanning tree
11.19 C++: Minimum spanning tree
11.20 All pairs shortest path
11.21 C++: All pairs shortest path

12.1 Huffman compression
12.2 Heuristics
12.3 C++: Heuristics
12.4 Greedy algorithms
12.5 C++: Greedy algorithms
12.6 Dynamic programming
12.7 C++: Dynamic programming

13.1 B-trees
13.2 2-3-4 tree search algorithm
13.3 2-3-4 tree insert algorithm
13.4 2-3-4 tree rotations and fusion
13.5 2-3-4 tree removal
13.6 C++: 2-3-4 trees

14.1 Bubble sort
14.2 Quickselect
14.3 C++: Quickselect
14.4 Bucket sort
14.5 List data structure
14.6 Circular lists

What You’ll Find In This zyBook:

More action with less text.

  • Pseudocode is used to teach essential data structures and algorithms, helping learners master the fundamental concepts
  • Features C++-specific code examples throughout
  • Over 55 auto-graded challenge activities are included to provide extra practice for students
  • Adopters have access to a test bank with over 400 questions

The zyBooks Approach

Less text doesn’t mean less learning.

Studying data structures and algorithms often represents a person’s first study of the “science” of computing, beyond just programming. Mastery of these concepts is part of the foundation of the discipline of computing, leading to computing professionals as distinct from programmers.

Data structures is an extremely visual subject, forming an excellent match for the extensive use of animations that typifies a zyBook. Embedded learning questions help the reader understand and remember concepts.

The content is maximally modular to enable configuration by instructors. Instructors can rearrange sections, set sections as optional, add instructor’s notes to sections, and more. This zyBook can also be mixed-and-matched with others, such as with the Programming in C++ zyBook; contact sales@zybooks.com for information.

Authors

Roman Lysecky
Professor Emeritus of Electrical and Computer Engineering, Univ. of Arizona

Frank Vahid
Computer Science PhD, Univ. of California, Irvine / zyBooks Co-Founder

Evan Olds
Senior Content Developer, zyBooks

Instructors: Interested in evaluating this zyBook for your class?