Fundamentals of data structures in C

2nd ed.
  • 5.0 (1 rating)
  • 9 Want to read
  • 1 Currently reading
  • 2 Have read

My Reading Lists:

Create a new list

  • 5.0 (1 rating)
  • 9 Want to read
  • 1 Currently reading
  • 2 Have read

Buy this book

Last edited by ImportBot
October 28, 2021 | History

Fundamentals of data structures in C

2nd ed.
  • 5.0 (1 rating)
  • 9 Want to read
  • 1 Currently reading
  • 2 Have read

The classic data structure textbook provides a comprehensive and technically rigorous introduction to data structures such as arrays, stacks, queues, linked lists, trees and graphs, and techniques such as sorting hashing that form the basis of all software. In addition, it presents advanced of specialized data structures such as priority queues, efficient binary search trees, multiway search trees and digital search structures. The book now discusses topics such as weight biased leftist trees, pairing heaps, symmetric min-max heaps, interval heaps, top-down splay trees, B+ trees and suffix trees. Red-black trees have been made more accessible. The section on multiway tries has been significantly expanded and several trie variations and their application to Interner packet forwarding have been disused.

Publish Date
Publisher
University Press
Language
English
Pages
617

Buy this book

Previews available in: English

Edition Availability
Cover of: Fundamentals of data structures in C
Fundamentals of data structures in C
2008, University Press
in English - 2nd ed.

Add another edition?

Book Details


Table of Contents

Chapter 1. Basic Concepts
Page 1
1.1. Overview: System Life Cycle
Page 1
1.2. Pointers and Dynamic Memory Allocation
Page 4
1.2.1. Pointers
Page 4
1.2.2. Dynamic Memory Allocation
Page 5
1.2.3. Pointers Can Be Dangerous
Page 7
1.3. Algorithm Specification
Page 8
1.3.1. Introduction
Page 8
1.3.2. Recursive Algorithms
Page 14
1.4. Data Abstraction
Page 18
1.5. Performance Analysis
Page 22
1.5.1. Space Complexity
Page 22
1.5.2. Time Complexity
Page 25
1.5.3. Asymptotic Notation
Page 33
1.5.4. Practical Complexities
Page 41
1.6. Performance Measurement
Page 44
1.6.1. Clocking
Page 44
1.6.2. Generating Test Data
Page 48
1.7. References and Selected Readings
Page 50
Chapter 2. Arrays and Structures
Page 51
2.1. Arrays
Page 51
2.1.1. The Abstract Data Type
Page 51
2.1.2. Arrays in C
Page 52
2.2. Dynamically Allocated Arrays
Page 55
2.2.1. One-dimensional Arrays
Page 55
2.2.2. Two-dimensional Arrays
Page 56
2.3. Structures and Unions
Page 59
2.3.1. Structures
Page 59
2.3.2. Unions
Page 62
2.3.3. Internal Representation of Structures
Page 63
2.3.4. Self-referential Structures
Page 63
2.4. Polynomials
Page 64
2.4.1. The Abstract Data Type
Page 64
2.4.2. Polynomial Representation
Page 66
2.4.3. Polynomial Addition
Page 69
2.5. Sparse Matrices
Page 72
2.5.1. The Abstract Data Type
Page 72
2.5.2. Sparse Matrix Representation
Page 74
2.5.3. Transposing a Matrix
Page 76
2.5.4. Matrix Multiplication
Page 79
2.6. Representation of Multidimensional Arrays
Page 85
2.7. Strings
Page 87
2.7.1. The Abstract Data Type
Page 87
2.7.2. Strings in C
Page 87
2.7.3. Pattern Matching
Page 90
2.8. References and Selected Readings
Page 98
2.9. Additional Exercises
Page 99
Chapter 3. Stacks and Queues
Page 107
3.1. Stacks
Page 107
3.2. Stacks Using Dynamic Arrays
Page 112
3.3. Queues
Page 114
3.4. Circular Queues Using Dynamic Arrays
Page 119
3.5. Amazing Problem
Page 120
3.6. Evaluation of Expressions
Page 127
3.6.1. Expressions
Page 127
3.6.2. Evaluating Postfix Expressions
Page 129
3.6.3. Infix to Postfix
Page 132
3.7. Multiple Stacks and Queues
Page 139
3.8. Additional Exercises
Page 142
Chapter 4. Linked Lists
Page 145
4.1. Singly Linked Lists and Chains
Page 145
4.2. Representing Chains in C
Page 149
4.3. Linked Stacks and Queues
Page 156
4.4. Polynomials
Page 160
4.4.1. Polynomial Representation
Page 160
4.4.2. Adding Polynomials
Page 161
4.4.3. Erasing Polynomials
Page 165
4.4.4. Circular List Representation of Polynomials
Page 166
4.4.5. Summary
Page 168
4.5. Additional List Operations
Page 171
4.5.1. Operations for Chains
Page 171
4.5.2. Operations for Circularly Linked Lists
Page 172
4.6. Equivalence Classes
Page 174
4.7. Sparse Matrices
Page 178
4.7.1. Sparse Matrix Representation
Page 178
4.7.2. Sparse Matrix Input
Page 181
4.7.3. Sparse Matrix Output
Page 184
4.7.4. Erasing a Sparse Matrix
Page 185
4.8. Doubly Linked Lists
Page 186
Chapter 5. Trees
Page 191
5.1. Introduction
Page 191
5.1.1. Terminology
Page 191
5.1.2. Representation of Trees
Page 194
5.2. Binary Trees
Page 197
5.2.1. The Abstract Data Type
Page 197
5.2.2. Properties of Binary Trees
Page 199
5.2.3. Binary Tree Representations
Page 202
5.3. Binary Tree Traversals
Page 205
5.3.1. Inorder Traversal
Page 206
5.3.2. Preorder Traversal
Page 208
5.3.3. Postorder Traversal
Page 208
5.3.4. Iterative Inorder Traversal
Page 209
5.3.5. Level-Order Traversal
Page 209
5.3.6. Traversal Without a Stack
Page 210
5.4. Additional Binary Tree Operations
Page 212
5.4.1. Copying Binary Trees
Page 212
5.4.2. Testing Equality
Page 212
5.4.3. The Satisfiability Problem
Page 213
5.5. Threaded Binary Trees
Page 216
5.5.1. Threads
Page 216
5.5.2. Inorder Traversal of a Threaded Binary Tree
Page 220
5.5.3. Inserting a Node into a Threaded Binary Tree
Page 220
5.6. Heaps
Page 222
5.6.1. Priority Queues
Page 222
5.6.2. Definition of a Max Heap
Page 224
5.6.3. Insertion into a Max Heap
Page 225
5.6.4. Deletion from a Max Heap
Page 228
5.7. Binary Search Trees
Page 231
5.7.1. Definition
Page 231
5.7.2. Searching a Binary Search Tree
Page 232
5.7.3. Insertion into a Binary Search Tree
Page 234
5.7.4. Deletion from a Binary Search Tree
Page 235
5.7.5. Joining and Splitting Binary Search Trees
Page 236
5.7.6. Height of a Binary Search Tree
Page 237
5.8. Selection Trees
Page 240
5.8.1. Introduction
Page 240
5.8.2. Winner Trees
Page 241
5.8.3. Loser Trees
Page 243
5.9. Forests
Page 244
5.9.1. Transforming a Forest into a Binary Tree
Page 245
5.9.2. Forest Traversals
Page 246
5.10. Representation of Disjoint Sets
Page 247
5.10.1. Introduction
Page 247
5.10.2. Union and Find Operations
Page 248
5.10.3. Application to Equivalence Classes
Page 256
5.11. Counting Binary Trees
Page 259
5.11.1. Distinct Binary Trees
Page 259
5.11.2. Stack Permutations
Page 259
5.11.3. Matrix Multiplication
Page 262
5.11.4. Number of Distinct Binary Trees
Page 263
5.12. References and Selected Readings
Page 264
Chapter 6. Graphs
Page 265
6.1. The Graph Abstract Data Type
Page 265
6.1.1. Introduction
Page 265
6.1.2. Definitions
Page 267
6.1.3. Graph Representations
Page 272
6.2. Elementary Graph Operations
Page 279
6.2.1. Depth First Search
Page 279
6.2.2. Breadth First Search
Page 281
6.2.3. Connected Components
Page 283
6.2.4. Spanning Trees
Page 284
6.2.5. Biconnected Components
Page 286
6.3. Minimum Cost Spanning Trees
Page 292
6.3.1. Kruskal's Algorithm
Page 292
6.3.2. Prim's Algorithm
Page 296
6.3.3. Sollin's Algorithm
Page 297
6.4. Shortest Paths and Transitive Closure
Page 299
6.4.1. Single Source/All Destination: Nonnegative Edge Costs
Page 300
6.4.2. Single Source/All Destination: General Weights
Page 303
6.4.3. All Pairs Shortest Paths
Page 307
6.4.4. Transitive Closure
Page 310
6.5. Activity Networks
Page 315
6.5.1. Activity-on-Vertex (AOV) Networks
Page 315
6.5.2. Activity-on-Edge (AOE) Networks
Page 320
6.6. References and Selected Readings
Page 330
6.7. Additional Exercises
Page 331
Chapter 7. Sorting
Page 333
7.1. Motivation
Page 333
7.2. Insertion Sort
Page 337
7.3. Quick Sort
Page 340
7.4. How Fast Can We Sort?
Page 343
7.5. Merge Sort
Page 346
7.5.1. Merging
Page 346
7.5.2. Iterative Merge Sort
Page 347
7.5.3. Recursive Merge Sort
Page 349
7.6. Heap Sort
Page 352
7.7. Sorting on Several Keys
Page 356
7.8. List and Table Sorts
Page 361
7.9. Summary of Internal Sorting
Page 370
7.10. External Sorting
Page 376
7.10.1. Introduction
Page 376
7.10.2. k-way Merging
Page 379
7.10.3. Buffer Handling for Parallel Operation
Page 381
7.10.4. Run Generation
Page 387
7.10.5. Optimal Merging of Runs
Page 388
7.11. References and Selected Readings
Page 394
Chapter 8. Hashing
Page 395
8.1. Introduction
Page 395
8.2. Static Hashing
Page 396
8.2.1. Hash Tables
Page 396
8.2.2. Hash Functions
Page 398
8.2.3. Overflow Handling
Page 401
8.2.4. Theoretical Evaluation of Overflow Techniques
Page 407
8.3. Dynamic Hashing
Page 410
8.3.1. Motivation for Dynamic Hashing
Page 410
8.3.2. Dynamic Hashing Using Directories
Page 411
8.3.3. Directoryless Dynamic Hashing
Page 414
8.4. Bloom Filters
Page 416
8.4.1. An Application — Differential Files
Page 416
8.4.2. Bloom Filter Design
Page 418
8.5. References and Selected Readings
Page 420
Chapter 9. Priority Queues
Page 422
9.1. Single- and Double-Ended Priority Queues
Page 422
9.2. Leftist Trees
Page 424
9.2.1. Height-Biased Leftist Trees
Page 424
9.2.2. Weight-Biased Leftist Trees
Page 428
9.3. Binomial Heaps
Page 433
9.3.1. Cost Amortization
Page 433
9.3.2. Definition of Binomial Heaps
Page 435
9.3.3. Insertion into a Binomial Heap
Page 436
9.3.4. Melding Two Binomial Heaps
Page 436
9.3.5. Deletion of Min Element
Page 436
9.3.6. Analysis
Page 439
9.4. Fibonacci Heaps
Page 442
9.4.1. Definition
Page 442
9.4.2. Deletion from an F-heap
Page 442
9.4.3. Decrease Key
Page 443
9.4.4. Cascading Cut
Page 444
9.4.5. Analysis
Page 445
9.4.6. Application to the Shortest Paths Problem
Page 447
9.5. Pairing Heaps
Page 450
9.5.1. Definition
Page 450
9.5.2. Meld and Insert
Page 451
9.5.3. Decrease Key
Page 452
9.5.4. Delete Min
Page 453
9.5.5. Arbitrary Delete
Page 456
9.5.6. Implementation Considerations
Page 457
9.5.7. Complexity
Page 457
9.6. Symmetric Min-Max Heaps
Page 458
9.6.1. Definition and Properties
Page 458
9.6.2. SMMH Representation
Page 460
9.6.3. Inserting into an SMMH
Page 460
9.6.4. Deleting from an SMMH
Page 465
9.7. Interval Heaps
Page 469
9.7.1. Definition and Properties
Page 469
9.7.2. Inserting into an Interval Heap
Page 471
9.7.3. Deleting the Min Element
Page 473
9.7.4. Initializing an Interval Heap
Page 475
9.7.5. Complexity of Interval Heap Operations
Page 475
9.7.6. The Complementary Range Search Problem
Page 475
9.8. References and Selected Readings
Page 478
Chapter 10. Efficient Binary Search Trees
Page 481
10.1. Optimal Binary Search Trees
Page 481
10.2. AVL Trees
Page 491
10.3. Red-Black Trees
Page 506
10.3.1. Definition
Page 506
10.3.2. Representation of a Red-Black Tree
Page 508
10.3.3. Searching a Red-Black Tree
Page 508
10.3.4. Inserting into a Red-Black Tree
Page 508
10.3.5. Deletion from a Red-Black Tree
Page 514
10.3.6. Joining Red-Black Trees
Page 514
10.3.7. Splitting a Red-Black Tree
Page 515
10.4. Splay Trees
Page 518
10.4.1. Bottom-Up Splay Trees
Page 518
10.4.2. Top-Down Splay Trees
Page 524
10.5. References and Selected Readings
Page 531
Chapter 11. Multiway Search Trees
Page 532
11.1. m-way Search Trees
Page 532
11.1.1. Definition and Properties
Page 532
11.1.2. Searching an m-way Search Tree
Page 534
11.2. B-Trees
Page 535
11.2.1. Definition and Properties
Page 535
11.2.2. Number of Elements in a B-Tree
Page 536
11.2.3. Insertion into a B-tree
Page 538
11.2.4. Deletion from a B-tree
Page 542
11.3. B+-Trees
Page 551
11.3.1. Definition
Page 551
11.3.2. Searching a B+-Tree
Page 552
11.3.3. Insertion into a B+-Tree
Page 553
11.3.4. Deletion from a B+-Tree
Page 554
11.4. References and Selected Readings
Page 560
Chapter 12. Digital Search Structures
Page 561
12.1. Digital Search Trees
Page 561
12.1.1. Definition
Page 561
12.1.2. Search, Insert and Delete
Page 562
12.2. Binary Tries and Patricia
Page 563
12.2.1. Binary Tries
Page 563
12.2.2. Compressed Binary Tries
Page 564
12.2.3. Patricia
Page 564
12.3. Multiway Tries
Page 571
12.3.1. Definition
Page 571
12.3.2. Searching a Trie
Page 574
12.3.3. Sampling Strategies
Page 574
12.3.4. Insertion into a Trie
Page 577
12.3.5. Deletion from a Trie
Page 577
12.3.6. Keys with Different Length
Page 578
12.3.7. Height of a Trie
Page 578
12.3.8. Space Required and Alternative Node Structures
Page 579
12.3.9. Prefix Search and Applications
Page 582
12.3.10. Compressed Tries
Page 584
12.3.11. Compressed Tries with Skip Fields
Page 587
12.3.12. Compressed Tries with Labeled Edges
Page 588
12.3.13. Space Required by a Compressed Trie
Page 592
12.4. Suffix Trees
Page 593
12.4.1. Have You Seen This String?
Page 593
12.4.2. The Suffix Tree Data Structure
Page 594
12.4.3. Let's Find That Substring (Searching a Suffix Tree)
Page 597
12.4.4. Other Nifty Things You Can Do with a Suffix Tree
Page 598
12.5. Tries and Internet Packet Forwarding
Page 600
12.5.1. IP Routing
Page 600
12.5.2. 1-Bit Tries
Page 601
12.5.3. Fixed-Stride Tries
Page 602
12.5.4. Variable-Stride Tries
Page 605
12.6. References and Selected Readings
Page 608
Index
Page 610

Edition Notes

Includes bibliographical references and index.

Published in
Hyderabad

Classifications

Dewey Decimal Class
001.6424

The Physical Object

Pagination
xvii, 617 pages
Number of pages
617

Edition Identifiers

Open Library
OL35367221M
Internet Archive
fundamentalsofda0002edhoro_l1t6
ISBN 10
8173716056
ISBN 13
9788173716058
OCLC/WorldCat
880367630
Amazon ID (ASIN)
B00D52P708

Work Identifiers

Work ID
OL26212173W

Community Reviews (0)

No community reviews have been submitted for this work.

Lists

History

Download catalog record: RDF / JSON
October 28, 2021 Created by ImportBot import new book