Data Structures

  • Steven S. Skiena


Data structures are not so much algorithms as they are the fundamental constructs around which you build your application. Becoming fluent in what the standard data structures can do for you is essential to get full value from them.

This puts data structures slightly out of sync with the rest of the catalog. Perhaps the most useful aspect of it will be the pointers to various implementations and data structure libraries. Many of these data structures are nontrivial to implement well, so the programs we point to will be useful as models even if they do not do exactly what you need. Certain fundamental data structures, like kd-trees and suffix trees, are not as well known as they should be. Hopefully, this catalog will serve to better publicize them.


Hash Function Minimum Span Tree Priority Queue Query Point Suffix Tree 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. [Sed98]
    R. Sedgewick. Algorithms in C++, Parts 1-4: Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms. Addison-Wesley, Reading MA, third edition, 1998.Google Scholar
  2. [GT05]
    M. Goodrich and R. Tamassia. Data Structures and Algorithms in Java. Wiley, fourth edition, 2005.Google Scholar
  3. [MS05]
    D. Mehta and S. Sahni. Handbook of Data Structures and Applications. Chapman and Hall / CRC, Boca Raton, FL, 2005.zbMATHGoogle Scholar
  4. [Jos99]
    N. Josuttis. The C++ Standard Library: A tutorial and reference. Addison-Wesley, 1999.Google Scholar
  5. [Mey01]
    S. Meyers. Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library. Addison-Wesley Professional, 2001.Google Scholar
  6. [MDS01]
    D. Musser, G. Derge, and A. Saini. STL Tutorial and Reference Guide: C++ Programming with the Standard Template Library. Addison-Wesley Professional, second edition, 2001.Google Scholar
  7. [MN99]
    K. Mehlhorn and S. Naher. LEDA: A platform for combinatorial and geometric computing. Cambridge University Press, 1999.Google Scholar
  8. [GTV05]
    M. Goodrich, R. Tamassia, and L. Vismara. Data structures in JDSL. In D. Mehta and S. Sahni, editors, Handbook of Data Structures and Applications, pages 43:1–43:22. Chapman and Hall / CRC, 2005.Google Scholar
  9. [Knu97a]
    D. Knuth. The Art of Computer Programming, Volume 1: Fundamental Algorithms. Addison-Wesley, Reading MA, third edition, 1997.Google Scholar
  10. [GBY91]
    G. Gonnet and R. Baeza-Yates. Handbook of Algorithms and Data Structures. Addison-Wesley, Wokingham, England, second edition, 1991.Google Scholar
  11. [Wei06]
    M. Weiss. Data Structures and Algorithm Analysis in Java. Addison Wesley, second edition, 2006.Google Scholar
  12. [GJM02]
    M. Goldwasser, D. Johnson, and C. McGeoch, editors. Data Structures, Near Neighbor Searches, and Methodology: Fifth and Sixth DIMACS Implementation Challenges, volume 59. AMS, Providence RI, 2002.zbMATHGoogle Scholar
  13. [Vit01]
    J. Vitter. External memory algorithms and data structures: Dealing with massive data. ACM Computing Surveys, 33:209–271, 2001.CrossRefGoogle Scholar
  14. [ABF05]
    L. Arge, G. Brodal, and R. Fagerberg. Cache-oblivious data structures. In D. Mehta and S. Sahni, editors, Handbook of Data Structures and Applications, pages 34:1–34:27. Chapman and Hall / CRC, 2005.Google Scholar
  15. [San00]
    P. Sanders. Fast priority queues for cached memory. ACM Journal of Experimental Algorithmics, 5, 2000.Google Scholar
  16. [CGS99]
    B. Cherkassky, A. Goldberg, and C. Silverstein. Buckets, heaps, lists, and monotone priority queues. SIAM J. Computing, 28:1326–1346, 1999.CrossRefzbMATHMathSciNetGoogle Scholar
  17. [Jon86]
    D. W. Jones. An empirical comparison of priority-queue and event-set implementations. Communications of the ACM, 29:300–311, 1986.CrossRefGoogle Scholar
  18. [LL96]
    A. LaMarca and R. Ladner. The influence of caches on the performance of heaps. ACM J. Experimental Algorithmics, 1, 1996.Google Scholar
  19. [Sah05]
    S. Sahni. Double-ended priority queues. In D. Mehta and S. Sahni, editors, Handbook of Data Structures and Applications, pages 8:1–8:23. Chapman and Hall / CRC, 2005.Google Scholar
  20. [vEBKZ77]
    P. van Emde Boas, R. Kaas, and E. Zulstra. Design and implementation of an efficient priority queue. Math. Systems Theory, 10:99–127, 1977.CrossRefzbMATHGoogle Scholar
  21. [FT87]
    M. Fredman and R. Tarjan. Fibonacci heaps and their uses in improved network optimization algorithms. J. ACM, 34:596–615, 1987.CrossRefMathSciNetGoogle Scholar
  22. [SV87]
    J. Stasko and J. Vitter. Pairing heaps: Experiments and analysis. Communications of the ACM, 30(3):234–249, 1987.CrossRefMathSciNetGoogle Scholar
  23. [GM86]
    G. Gonnet and J. I. Munro. Heaps on heaps. SIAM J. Computing, 15:964–971, 1986.CrossRefzbMATHMathSciNetGoogle Scholar
  24. [CC92]
    S. Carlsson and J. Chen. The complexity of heaps. In Proc. Third ACM-SIAM Symp. on Discrete Algorithms, pages 393–402, 1992.Google Scholar
  25. [Gus97]
    D. Gusfield. Algorithms on Strings, Trees, and Sequences: Computer Science and Computational Biology. Cambridge University Press, 1997.Google Scholar
  26. [CR03]
    M. Crochemore and W. Rytter. Jewels of Stringology. World Scientific, 2003.Google Scholar
  27. [PST07]
    S. Puglisi, W. Smyth, and A. Turpin. A taxonomy of suffix array construction algorithms. ACM Computing Surveys, 39, 2007.Google Scholar
  28. [SS07]
    K. Schurmann and J. Stoye. An incomplex algorithm for fast suffix array construction. Software: Practice and Experience, 37:309–329, 2007.CrossRefGoogle Scholar
  29. [Nel96]
    M. Nelson. Fast searching with suffix trees. Dr. Dobbs Journal, August 1996.Google Scholar
  30. [Fre62]
    E. Fredkin. Trie memory. Communications of the ACM, 3:490–499, 1962.CrossRefGoogle Scholar
  31. [Wei73]
    P. Weiner. Linear pattern-matching algorithms. In Proc. 14th IEEE Symp. on Switching and Automata Theory, pages 1–11, 1973.Google Scholar
  32. [McC76]
    E. McCreight. A space-economical suffix tree construction algorithm. J. ACM, 23:262–272, 1976.CrossRefzbMATHMathSciNetGoogle Scholar
  33. [Ukk92]
    E. Ukkonen. Constructing suffix trees on-line in linear time. In Intern. Federation of Information Processing (IFIP ’92), pages 484–492, 1992.Google Scholar
  34. [MM93]
    U. Manber and G. Myers. Suffix arrays: A new method for on–line string searches. SIAM J. Computing, pages 935–948, 1993.Google Scholar
  35. [KSPP03]
    D Kim, J. Sim, H. Park, and K. Park. Linear-time construction of suffix arrays. In Proc. 14th Symp. Combinatorial Pattern Matching (CPM), pages 186–199, 2003.Google Scholar
  36. [KA03]
    P. Ko and S. Aluru. Space-efficient linear time construction of suffix arrays,. In Proc. 14th Symp. on Combinatorial Pattern Matching (CPM), pages 200–210. Springer-Verlag LNCS, 2003.Google Scholar
  37. [KSB05]
    J. Kärkkäinen, P. Sanders, and S. Burkhardt. Linear work suffix array construction. J. ACM, 2005.Google Scholar
  38. [MN07]
    V. Makinen and G. Navarro. Compressed full text indexes. ACM Computing Surveys, 39, 2007.Google Scholar
  39. [HT84]
    D. Harel and R. E. Tarjan. Fast algorithms for finding nearest common ancestors. SIAM J. Comput., 13:338–355, 1984.CrossRefzbMATHMathSciNetGoogle Scholar
  40. [SV88]
    B. Schieber and U. Vishkin. On finding lowest common ancestors: simplification and parallelization. SIAM J. Comput., 17(6):1253–1262, December 1988.CrossRefzbMATHMathSciNetGoogle Scholar
  41. [BF00]
    M. Bender and M. Farach. The LCA problem revisited. In Proc. 4th Latin American Symp. on Theoretical Informatics, pages 88–94. Springer-Verlag LNCS vol. 1776, 2000.Google Scholar
  42. [SLL02]
    J. Siek, L. Lee, and A. Lumsdaine. The Boost Graph Library: user guide and reference manual. Addison Wesley, Boston, 2002.Google Scholar
  43. [SR03]
    S. Skiena and M. Revilla. Programming Challenges: The Programming Contest Training Manual. Springer-Verlag, 2003.Google Scholar
  44. [PS03]
    S. Pemmaraju and S. Skiena. Computational Discrete Mathematics: Combinatorics and Graph Theory with Mathematica. Cambridge University Press, New York, 2003.zbMATHGoogle Scholar
  45. [HT73b]
    J. Hopcroft and R. Tarjan. Efficient algorithms for graph manipulation. Communications of the ACM, 16:372–378, 1973.CrossRefGoogle Scholar
  46. [Tar72]
    R. Tarjan. Depth-first search and linear graph algorithms. SIAM J. Computing, 1:146–160, 1972.CrossRefzbMATHMathSciNetGoogle Scholar
  47. [CLRS01]
    T. Cormen, C. Leiserson, R. Rivest, and C. Stein. Introduction to Algorithms. MIT Press, Cambridge MA, second edition, 2001.zbMATHGoogle Scholar
  48. [AHU83]
    A. Aho, J. Hopcroft, and J. Ullman. Data Structures and Algorithms. Addison-Wesley, Reading MA, 1983.zbMATHGoogle Scholar
  49. [Tar83]
    R. Tarjan. Data Structures and Network Algorithms. Society for Industrial and Applied Mathematics, Philadelphia, 1983.CrossRefGoogle Scholar
  50. [Ber89]
    C. Berge. Hypergraphs. North-Holland, Amsterdam, 1989.Google Scholar
  51. [NZ02]
    S. Näher and O. Zlotowski. Design and implementation of efficient data types for static graphs. In European Symposium on Algorithms (ESA), pages 748–759, 2002.Google Scholar
  52. [vL90b]
    J. van Leeuwen, editor. Handbook of Theoretical Computer Science: Algorithms and Complexity, volume A. MIT Press, 1990.Google Scholar
  53. [EGIN92]
    D. Eppstein, Z. Galil, G. F. Italiano, and A. Nissenzweig. Sparsification: A technique for speeding up dynamic graph algorithms. In Proc. 33rd IEEE Symp. on Foundations of Computer Science (FOCS), pages 60–69, 1992.Google Scholar
  54. [ACI92]
    D. Alberts, G. Cattaneo, and G. Italiano. An empirical study of dynamic graph algorithms. In Proc. Seventh ACM-SIAM Symp. Discrete Algorithms (SODA), pages 192–201, 1992.Google Scholar
  55. [Zar02]
    C. Zaroliagis. Implementations and experimental studies of dynamic graph algorithms. In Experimental algorithmics: from algorithm design to robust and efficient software, pages 229–278. Springer-Verlag LNCS, 2002.Google Scholar
  56. [Len90]
    T. Lengauer. Combinatorial Algorithms for Integrated Circuit Layout. Wiley, Chichester, England, 1990.zbMATHGoogle Scholar
  57. [Len89]
    T. Lengauer. Hierarchical planarity testing algorithms. J. ACM, 36(3):474–509, July 1989.CrossRefzbMATHMathSciNetGoogle Scholar
  58. [LW88]
    T. Lengauer and E. Wanke. Efficient solution of connectivity problems on hierarchically defined graphs. SIAM J. Computing, 17:1063–1080, 1988.CrossRefzbMATHMathSciNetGoogle Scholar
  59. [Len87a]
    T. Lengauer. Efficient algorithms for finding minimum spanning forests of hierarchically defined graphs. J. Algorithms, 8, 1987.Google Scholar
  60. [Rei72]
    E. Reingold. On the optimality of some set algorithms. J. ACM, 19:649–659, 1972.CrossRefzbMATHMathSciNetGoogle Scholar
  61. [Ram05]
    R. Raman. Data structures for sets. In D. Mehta and S. Sahni, editors, Handbook of Data Structures and Applications, pages 33:1–33:22. Chapman and Hall / CRC, 2005.Google Scholar
  62. [PSS07]
    F. Putze, P. Sanders, and J. Singler. Cache-, hash-, and space-efficient bloom filters. In Proc. 6th Workshop on Experimental Algorithms (WEA), LNCS 4525, pages 108–121, 2007.Google Scholar
  63. [Jac89]
    G. Jacobson. Space-efficient static trees and graphs. In Proc. Symp. Foundations of Computer Science (FOCS), pages 549–554, 1989.Google Scholar
  64. [GI91]
    Z. Galil and G. Italiano. Data structures and algorithms for disjoint set union problems. ACM Computing Surveys, 23:319–344, 1991.CrossRefGoogle Scholar
  65. [Tar75]
    R. Tarjan. Efficiency of a good but not linear set union algorithm. J. ACM, 22:215–225, 1975.CrossRefzbMATHMathSciNetGoogle Scholar
  66. [Tar79]
    R. Tarjan. A class of algorithms which require non-linear time to maintain disjoint sets. J. Computer and System Sciences, 18:110–127, 1979.CrossRefzbMATHMathSciNetGoogle Scholar
  67. [SA95]
    M. Sharir and P. Agarwal. Davenport-Schinzel sequences and their geometric applications. Cambridge University Press, New York, 1995.zbMATHGoogle Scholar
  68. [BCGR92]
    D. Berque, R. Cecchini, M. Goldberg, and R. Rivenburgh. The SetPlayer system for symbolic computation on power sets. J. Symbolic Computation, 14:645–662, 1992.zbMATHMathSciNetGoogle Scholar
  69. [Sam06]
    H. Samet. Foundations of Multidimensional and Metric Data Structures. Morgan Kaufmann, 2006.Google Scholar
  70. [Sam05]
    H. Samet. Multidimensional spatial data structures. In D. Mehta and S. Sahni, editors, Handbook of Data Structures and Applications, pages 16:1–16:29. Chapman and Hall / CRC, 2005.Google Scholar
  71. [Ben75]
    J. Bentley. Multidimensional binary search trees used for associative searching. Communications of the ACM, 18:509–517, 1975.CrossRefzbMATHGoogle Scholar
  72. [IM04]
    P. Indyk and J. Matousek. Low-distortion embeddings of finite metric spaces. In J. Goodman and J. O’Rourke, editors, Handbook of Discrete and Computational Geometry. CRC Press, 2004.Google Scholar
  73. [BM01]
    E. Bingham and H. Mannila. Random projection in dimensionality reduction: applications to image and text data. In Proc. ACM Conf. Knowledge Discovery and Data Mining (KDD), pages 245–250, 2001.Google Scholar
  74. [AM93]
    S. Arya and D. Mount. Approximate nearest neighbor queries in fixed dimensions. In Proc. Fourth ACM-SIAM Symp. Discrete Algorithms (SODA), pages 271–280, 1993.Google Scholar
  75. [AMN+98]
    S. Arya, D. Mount, N. Netanyahu, R. Silverman, and A. Wu. An optimal algorithm for approximate nearest neighbor searching in fixed dimensions. J. ACM, 45:891 – 923, 1998.CrossRefzbMATHMathSciNetGoogle Scholar

Copyright information

© Springer-Verlag London Limited 2012

Authors and Affiliations

  1. 1.Department of Computer ScienceState University of New York at Stony BrookNew YorkUSA

Personalised recommendations