-
- Linked Lists
- 5.1. Description of Linked Lists
- 5.2. Interface for Linked Lists
- 5.3. Implementation and Analysis of Linked Lists
- 5.3.1. list_init
- 5.3.2. list_destroy
- 5.3.3. list_ins_next
- 5.3.4. list_rem_next
- 5.3.5. list_size, list_head, list_tail, list_is_tail,list_data, and list_next
- 5.4. Linked List Example: Frame Management
- 5.5. Description of Doubly-Linked Lists
- 5.6. Interface for Doubly-Linked Lists
- 5.7. Implementation and Analysis of Doubly Linked Lists
- 5.7.1. dlist_init
- 5.7.2. dlist_destroy
- 5.7.3. dlist_ins_next
- 5.7.4. dlist_ins_ prev
- 5.7.5. dlist_remove
- 5.7.6. dlist_size, dlist_head, dlist_tail, dlist_is_head, dlist_is_tail, dlist_data, dlist_next, and dlist_ prev
- 5.8. Description of Circular Lists
- 5.9. Interface for Circular Lists
- 5.10. Implementation and Analysis of Circular Lists
- 5.10.1. clist_init
- 5.10.2. clist_destroy
- 5.10.3. clist_ins_next
- 5.10.4. clist_rem_next
- 5.10.5. clist_size, clist_head, clist_data, and clist_next
- 5.11. Circular List Example: Second-Chance Page Replacement
- 5.12. Questions and Answers
- 5.13. Related Topics
-
- Stacks and Queues
- 6.1. Description of Stacks
- 6.2. Interface for Stacks
- 6.3. Implementation and Analysis of Stacks
- 6.3.1. stack_init
- 6.3.2. stack_destroy
- 6.3.3. stack_ push
- 6.3.4. stack_ pop
- 6.3.5. stack_ peek, stack_size
- 6.4. Description of Queues
- 6.5. Interface for Queues
- 6.6. Implementation and Analysis of Queues
- 6.6.1. queue_init
- 6.6.2. queue_destroy
- 6.6.3. queue_enqueue
- 6.6.4. queue_dequeue
- 6.6.5. queue_ peek, queue_size
- 6.7. Queue Example: Event Handling
- 6.8. Questions and Answers
- 6.9. Related Topics
-
- Sets
- 7.1. Description of Sets
- 7.1.1. Definitions
- 7.1.2. Basic Operations
- 7.1.3. Properties
- 7.2. Interface for Sets
- 7.3. Implementation and Analysis of Sets
- 7.3.1. set_init
- 7.3.2. set_destroy
- 7.3.3. set_insert
- 7.3.4. set_remove
- 7.3.5. set_union
- 7.3.6. set_intersection
- 7.3.7. set_difference
- 7.3.8. set_is_member
- 7.3.9. set_is_subset
- 7.3.10. set_is_equal
- 7.3.11. set_size
- 7.4. Set Example: Set Covering
- 7.5. Questions and Answers
- 7.6. Related Topics
-
- Hash Tables
- 8.1. Description of Chained Hash Tables
- 8.1.1. Collision Resolution
- 8.1.2. Selecting a Hash Function
- 8.1.2.1. Division method
- 8.1.2.2. Multiplication method
- 8.2. Interface for Chained Hash Tables
- 8.3. Implementation and Analysis of Chained Hash Tables
- 8.3.1. chtbl_init
- 8.3.2. chtbl_destroy
- 8.3.3. chtbl_insert
- 8.3.4. chtbl_remove
- 8.3.5. chtbl_lookup
- 8.3.6. chtbl_size
- 8.4. Chained Hash Table Example: Symbol Tables
- 8.5. Description of Open-Addressed Hash Tables
- 8.5.1. Collision Resolution
- 8.5.1.1. Linear probing
- 8.5.1.2. Double hashing
- 8.6. Interface for Open-Addressed Hash Tables
- 8.7. Implementation and Analysisof Open Addressed Hash Tables
- 8.7.1. ohtbl_init
- 8.7.2. ohtbl_destroy
- 8.7.3. ohtbl_insert
- 8.7.4. ohtbl_remove
- 8.7.5. ohtbl_lookup
- 8.7.6. ohtbl_size
- 8.8. Questions and Answers
- 8.9. Related Topics
-
- Trees
- 9.1. Description of Binary Trees
- 9.1.1. Traversal Methods
- 9.1.1.1. Preorder traversal
- 9.1.1.2. Inorder traversal
- 9.1.1.3. Postorder traversal
- 9.1.1.4. Level-order traversal
- 9.1.2. Tree Balancing
- 9.1.1. Traversal Methods
- 9.2. Interface for Binary Trees
- 9.3. Implementation and Analysis of Binary Trees
- 9.3.1. bitree_init
- 9.3.2. bitree_destroy
- 9.3.3. bitree_ins_left
- 9.3.4. bitree_ins_right
- 9.3.5. bitree_rem_left
- 9.3.6. bitree_rem_right
- 9.3.7. bitree_merge
- 9.3.8. bitree_size, bitree_root, bitree_is_eob, bitree_is_leaf, bitree_data, bitree_left, bitree_right
- 9.4. Binary Tree Example: Expression Processing
- 9.5. Description of Binary Search Trees
- 9.6. Interface for Binary Search Trees
- 9.7. Implementation and Analysis of Binary Search Trees
- 9.7.1. Rotations in AVL Trees
- 9.7.1.1. LL rotation
- 9.7.1.2. LR rotation
- 9.7.1.3. RR rotation
- 9.7.1.4. RL rotation
- 9.7.2. bistree_init
- 9.7.3. bistree_destroy
- 9.7.4. bistree_insert
- 9.7.5. bistree_remove
- 9.7.6. bistree_lookup
- 9.7.7. bistree_size
- 9.7.1. Rotations in AVL Trees
- 9.8. Questions and Answers
- 9.9. Related Topics
-
- Heaps and Priority Queues
- 10.1. Description of Heaps
- 10.2. Interface for Heaps
- 10.3. Implementation and Analysis of Heaps
- 10.3.1. heap_init
- 10.3.2. heap_destroy
- 10.3.3. heap_insert
- 10.3.4. heap_extract
- 10.3.5. heap_size
- 10.4. Description of Priority Queues
- 10.5. Interface for Priority Queues
- 10.6. Implementation and Analysis of Priority Queues
- 10.7. Priority Queue Example: Parcel Sorting
- 10.8. Questions and Answers
- 10.9. Related Topics
-
- Graphs
- 11.1. Description of Graphs
- 11.1.1. Search Methods
- 11.1.1.1. Breadth-first search
- 11.1.1.2. Depth-first search
- 11.2. Interface for Graphs
- 11.3. Implementation and Analysis of Graphs
- 11.3.1. graph_init
- 11.3.2. graph_destroy
- 11.3.3. graph_ins_vertex
- 11.3.4. graph_ins_edge
- 11.3.5. graph_rem_vertex
- 11.3.6. graph_rem_edge
- 11.3.7. graph_adjlist
- 11.3.8. graph_is_adjacent
- 11.3.9. graph_adjlists, graph_vcount, graph_ecount
- 11.4. Graph Example: Counting Network Hops
- 11.5. Graph Example: Topological Sorting
-
- Sorting and Searching
- 12.1. Description of Insertion Sort
- 12.2. Interface for Insertion Sort
- 12.3. Implementation and Analysis of Insertion Sort
- 12.4. Description of Quicksort
- 12.5. Interface for Quicksort
- 12.6. Implementation and Analysis of Quicksort
- 12.7. Quicksort Example: Directory Listings
- 12.8. Description of Merge Sort
- 12.9. Interface for Merge Sort
- 12.10. Implementation and Analysis of Merge Sort
- 12.11. Description of Counting Sort
- 12.12. Interface for Counting Sort
- 12.13. Implementation and Analysis of Counting Sort
- 12.14. Description of Radix Sort
- 12.15. Interface for Radix Sort
- 12.16. Implementation and Analysis of Radix Sort
- 12.17. Description of Binary Search
- 12.18. Interface for Binary Search
- 12.19. Implementation and Analysis of Binary Search
- 12.20. Binary Search Example: Spell Checking
- 12.21. Questions and Answers
- 12.22. Related Topics
-
- Numerical Methods
- 13.1. Description of Polynomial Interpolation
- 13.1.1. Constructing an Interpolating Polynomial
- 13.1.2. Evaluating an Interpolating Polynomial
- 13.2. Interface for Polynomial Interpolation
- 13.3. Implementation and Analysis of Polynomial Interpolation
- 13.4. Description of Least-Squares Estimation
- 13.5. Interface for Least-Squares Estimation
- 13.6. Implementation and Analysis of Least-Squares Estimation
- 13.7. Description of the Solution of Equations
- 13.7.1. Finding Roots with Newton’s Method
- 13.7.2. Computing the Derivative of a Polynomial
- 13.7.3. Understanding the First and Second Derivative
- 13.7.4. Selecting an Initial Point for Newton’s Method
- 13.7.5. How Newton’s Method Works
- 13.8. Interface for the Solution of Equations
- 13.9. Implementation and Analysis of the Solution of Equations
- 13.10. Questions and Answers
- 13.11. Related Topics
-
- Data Compression
- 14.1. Description of Bit Operations
- 14.2. Interface for Bit Operations
- 14.3. Implementation and Analysis of Bit Operations
- 14.3.1. bit_ get
- 14.3.2. bit_set
- 14.3.3. bit_xor
- 14.3.4. bit_rot_left
- 14.4. Description of Huffman Coding
- 14.4.1. Entropy and Minimum Redundancy
- 14.4.2. Building a Huffman Tree
- 14.4.3. Compressing and Uncompressing Data
- 14.4.4. Effectiveness of Huffman Coding
- 14.5. Interface for Huffman Coding
- 14.6. Implementation and Analysis of Huffman Coding
- 14.6.1. huffman_compress
- 14.6.2. huffman_uncompress
- 14.7. Huffman Coding Example: Optimized Networking
- 14.8. Description of LZ77
- 14.8.1. Maintaining a Dictionary of Phrases
- 14.8.2. Compressing and Uncompressing Data
- 14.8.3. Effectiveness of LZ77
- 14.9. Interface for LZ77
- 14.10. Implementation and Analysis of LZ77
- 14.10.1. lz77_compress
- 14.10.2. lz77_uncompress
- 14.11. Questions and Answers
- 14.12. Related Topics
-
- Data Encryption
- 15.1. Description of DES
- 15.1.1. Computing Subkeys
- 15.1.2. Enciphering and Deciphering Data Blocks
- 15.2. Interface for DES
- 15.3. Implementation and Analysis of DES
- 15.3.1. des_encipher
- 15.3.2. des_decipher
- 15.4. DES Example: Block Cipher Modes
- 15.5. Description of RSA
- 15.5.1. Computing Public and Private Keys
- 15.5.2. Enciphering and Deciphering Data Blocks
- 15.6. Interface for RSA
- 15.7. Implementation and Analysis of RSA
- 15.7.1. rsa_encipher
- 15.7.2. rsa_decipher
- 15.8. Questions and Answers
- 15.9. Related Topics
-
- Graph Algorithms
- 16.1. Description of Minimum Spanning Trees
- 16.1.1. Prim’s Algorithm
- 16.2. Interface for Minimum Spanning Trees
- 16.3. Implementation and Analysis of Minimum Spanning Trees
- 16.4. Description of Shortest Paths
- 16.4.1. Dijkstra’s Algorithm
- 16.5. Interface for Shortest Paths
- 16.6. Implementation and Analysis of Shortest Paths
- 16.7. Shortest Paths Example: Routing Tables
- 16.8. Description of the Traveling-Salesman Problem
- 16.8.1. Applying the Nearest-Neighbor Heuristic
- 16.9. Interface for the Traveling-Salesman Problem
- 16.10. Implementation and Analysis of the Traveling-Salesman Problem
- 16.11. Questions and Answers
- 16.12. Related Topics
-
- Geometric Algorithms
- 17.1. Description of Testing Whether Line Segments Intersect
- 17.1.1. Standard Test for Intersecting Line Segments
- 17.1.2. Computer Test for Intersecting Line Segments
- 17.2. Interface for Testing Whether Line Segments Intersect
- 17.3. Implementation and Analysis of Testing Whether Line Segments Intersect
- 17.4. Description of Convex Hulls
- 17.4.1. Jarvis’s March
- 17.5. Interface for Convex Hulls
- 17.6. Implementation and Analysis of Convex Hulls
- 17.7. Description of Arc Length on Spherical Surfaces
- 17.7.1. Rectilinear and Spherical Coordinates
- 17.7.2. Converting Between Coordinate Systems
- 17.7.3. Computing the Length of an Arc
- 17.8. Interface for Arc Length on Spherical Surfaces
- 17.9. Implementation and Analysis of Arc Length on Spherical Surfaces
- 17.10. Arc Length Example: Approximating Distances on Earth