Skip to main content

Data Structures

  • Chapter
The Algorithm Design Manual
  • 228k Accesses

Abstract

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.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 54.99
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

Bibliography

  1. 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. M. Goodrich and R. Tamassia. Data Structures and Algorithms in Java. Wiley, fourth edition, 2005.

    Google Scholar 

  3. D. Mehta and S. Sahni. Handbook of Data Structures and Applications. Chapman and Hall / CRC, Boca Raton, FL, 2005.

    MATH  Google Scholar 

  4. N. Josuttis. The C++ Standard Library: A tutorial and reference. Addison-Wesley, 1999.

    Google Scholar 

  5. S. Meyers. Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library. Addison-Wesley Professional, 2001.

    Google Scholar 

  6. 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. K. Mehlhorn and S. Naher. LEDA: A platform for combinatorial and geometric computing. Cambridge University Press, 1999.

    Google Scholar 

  8. 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. D. Knuth. The Art of Computer Programming, Volume 1: Fundamental Algorithms. Addison-Wesley, Reading MA, third edition, 1997.

    Google Scholar 

  10. G. Gonnet and R. Baeza-Yates. Handbook of Algorithms and Data Structures. Addison-Wesley, Wokingham, England, second edition, 1991.

    Google Scholar 

  11. M. Weiss. Data Structures and Algorithm Analysis in Java. Addison Wesley, second edition, 2006.

    Google Scholar 

  12. 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.

    MATH  Google Scholar 

  13. J. Vitter. External memory algorithms and data structures: Dealing with massive data. ACM Computing Surveys, 33:209–271, 2001.

    Article  Google Scholar 

  14. 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. P. Sanders. Fast priority queues for cached memory. ACM Journal of Experimental Algorithmics, 5, 2000.

    Google Scholar 

  16. B. Cherkassky, A. Goldberg, and C. Silverstein. Buckets, heaps, lists, and monotone priority queues. SIAM J. Computing, 28:1326–1346, 1999.

    Article  MATH  MathSciNet  Google Scholar 

  17. D. W. Jones. An empirical comparison of priority-queue and event-set implementations. Communications of the ACM, 29:300–311, 1986.

    Article  Google Scholar 

  18. A. LaMarca and R. Ladner. The influence of caches on the performance of heaps. ACM J. Experimental Algorithmics, 1, 1996.

    Google Scholar 

  19. 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. P. van Emde Boas, R. Kaas, and E. Zulstra. Design and implementation of an efficient priority queue. Math. Systems Theory, 10:99–127, 1977.

    Article  MATH  Google Scholar 

  21. M. Fredman and R. Tarjan. Fibonacci heaps and their uses in improved network optimization algorithms. J. ACM, 34:596–615, 1987.

    Article  MathSciNet  Google Scholar 

  22. J. Stasko and J. Vitter. Pairing heaps: Experiments and analysis. Communications of the ACM, 30(3):234–249, 1987.

    Article  MathSciNet  Google Scholar 

  23. G. Gonnet and J. I. Munro. Heaps on heaps. SIAM J. Computing, 15:964–971, 1986.

    Article  MATH  MathSciNet  Google Scholar 

  24. 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. D. Gusfield. Algorithms on Strings, Trees, and Sequences: Computer Science and Computational Biology. Cambridge University Press, 1997.

    Google Scholar 

  26. M. Crochemore and W. Rytter. Jewels of Stringology. World Scientific, 2003.

    Google Scholar 

  27. S. Puglisi, W. Smyth, and A. Turpin. A taxonomy of suffix array construction algorithms. ACM Computing Surveys, 39, 2007.

    Google Scholar 

  28. K. Schurmann and J. Stoye. An incomplex algorithm for fast suffix array construction. Software: Practice and Experience, 37:309–329, 2007.

    Article  Google Scholar 

  29. M. Nelson. Fast searching with suffix trees. Dr. Dobbs Journal, August 1996.

    Google Scholar 

  30. E. Fredkin. Trie memory. Communications of the ACM, 3:490–499, 1962.

    Article  Google Scholar 

  31. P. Weiner. Linear pattern-matching algorithms. In Proc. 14th IEEE Symp. on Switching and Automata Theory, pages 1–11, 1973.

    Google Scholar 

  32. E. McCreight. A space-economical suffix tree construction algorithm. J. ACM, 23:262–272, 1976.

    Article  MATH  MathSciNet  Google Scholar 

  33. 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. 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. 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. 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. J. Kärkkäinen, P. Sanders, and S. Burkhardt. Linear work suffix array construction. J. ACM, 2005.

    Google Scholar 

  38. V. Makinen and G. Navarro. Compressed full text indexes. ACM Computing Surveys, 39, 2007.

    Google Scholar 

  39. D. Harel and R. E. Tarjan. Fast algorithms for finding nearest common ancestors. SIAM J. Comput., 13:338–355, 1984.

    Article  MATH  MathSciNet  Google Scholar 

  40. B. Schieber and U. Vishkin. On finding lowest common ancestors: simplification and parallelization. SIAM J. Comput., 17(6):1253–1262, December 1988.

    Article  MATH  MathSciNet  Google Scholar 

  41. 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. J. Siek, L. Lee, and A. Lumsdaine. The Boost Graph Library: user guide and reference manual. Addison Wesley, Boston, 2002.

    Google Scholar 

  43. S. Skiena and M. Revilla. Programming Challenges: The Programming Contest Training Manual. Springer-Verlag, 2003.

    Google Scholar 

  44. S. Pemmaraju and S. Skiena. Computational Discrete Mathematics: Combinatorics and Graph Theory with Mathematica. Cambridge University Press, New York, 2003.

    MATH  Google Scholar 

  45. J. Hopcroft and R. Tarjan. Efficient algorithms for graph manipulation. Communications of the ACM, 16:372–378, 1973.

    Article  Google Scholar 

  46. R. Tarjan. Depth-first search and linear graph algorithms. SIAM J. Computing, 1:146–160, 1972.

    Article  MATH  MathSciNet  Google Scholar 

  47. T. Cormen, C. Leiserson, R. Rivest, and C. Stein. Introduction to Algorithms. MIT Press, Cambridge MA, second edition, 2001.

    MATH  Google Scholar 

  48. A. Aho, J. Hopcroft, and J. Ullman. Data Structures and Algorithms. Addison-Wesley, Reading MA, 1983.

    MATH  Google Scholar 

  49. R. Tarjan. Data Structures and Network Algorithms. Society for Industrial and Applied Mathematics, Philadelphia, 1983.

    Book  Google Scholar 

  50. C. Berge. Hypergraphs. North-Holland, Amsterdam, 1989.

    Google Scholar 

  51. 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. J. van Leeuwen, editor. Handbook of Theoretical Computer Science: Algorithms and Complexity, volume A. MIT Press, 1990.

    Google Scholar 

  53. 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. 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. 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. T. Lengauer. Combinatorial Algorithms for Integrated Circuit Layout. Wiley, Chichester, England, 1990.

    MATH  Google Scholar 

  57. T. Lengauer. Hierarchical planarity testing algorithms. J. ACM, 36(3):474–509, July 1989.

    Article  MATH  MathSciNet  Google Scholar 

  58. T. Lengauer and E. Wanke. Efficient solution of connectivity problems on hierarchically defined graphs. SIAM J. Computing, 17:1063–1080, 1988.

    Article  MATH  MathSciNet  Google Scholar 

  59. T. Lengauer. Efficient algorithms for finding minimum spanning forests of hierarchically defined graphs. J. Algorithms, 8, 1987.

    Google Scholar 

  60. E. Reingold. On the optimality of some set algorithms. J. ACM, 19:649–659, 1972.

    Article  MATH  MathSciNet  Google Scholar 

  61. 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. 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. G. Jacobson. Space-efficient static trees and graphs. In Proc. Symp. Foundations of Computer Science (FOCS), pages 549–554, 1989.

    Google Scholar 

  64. Z. Galil and G. Italiano. Data structures and algorithms for disjoint set union problems. ACM Computing Surveys, 23:319–344, 1991.

    Article  Google Scholar 

  65. R. Tarjan. Efficiency of a good but not linear set union algorithm. J. ACM, 22:215–225, 1975.

    Article  MATH  MathSciNet  Google Scholar 

  66. R. Tarjan. A class of algorithms which require non-linear time to maintain disjoint sets. J. Computer and System Sciences, 18:110–127, 1979.

    Article  MATH  MathSciNet  Google Scholar 

  67. M. Sharir and P. Agarwal. Davenport-Schinzel sequences and their geometric applications. Cambridge University Press, New York, 1995.

    MATH  Google Scholar 

  68. 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.

    MATH  MathSciNet  Google Scholar 

  69. H. Samet. Foundations of Multidimensional and Metric Data Structures. Morgan Kaufmann, 2006.

    Google Scholar 

  70. 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. J. Bentley. Multidimensional binary search trees used for associative searching. Communications of the ACM, 18:509–517, 1975.

    Article  MATH  Google Scholar 

  72. 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. 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. 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. 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.

    Article  MATH  MathSciNet  Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Steven S. Skiena .

Rights and permissions

Reprints and permissions

Copyright information

© 2012 Springer-Verlag London Limited

About this chapter

Cite this chapter

Skiena, S.S. (2012). Data Structures. In: The Algorithm Design Manual. Springer, London. https://doi.org/10.1007/978-1-84800-070-4_12

Download citation

  • DOI: https://doi.org/10.1007/978-1-84800-070-4_12

  • Publisher Name: Springer, London

  • Print ISBN: 978-1-84800-069-8

  • Online ISBN: 978-1-84800-070-4

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics