# Questions tagged [data-structures]

A data structure is a way of organizing data in a fashion that allows particular properties of that data to be queried and/or updated efficiently.

Data structures are ubiquitous in software. Hash tables, balanced trees, and dynamic arrays are essential building blocks for large, complicated systems and almost all programmers have encountered them at some point. More complicated structures like binary heaps can speed up complicated systems, while simpler concepts like stacks and queues make it possible to more elegantly and concisely encode algorithms.

Of course, this is just the tip of the iceberg when it comes to data structures. Theoreticians have been developing progressively better and better data structures over the past years, many of which are used extensively in modern software, and many are only useful from a theoretical perspective.

Data structures are closely related to algorithms. Often, a good choice of data structure can lead to a marked improvement in an algorithm's runtime. For example, Dijkstra's algorithm with a naive implementation of a priority queue runs in quadratic time, but with a fast Fibonacci heap can be shown to run in `O(m + n lg n)`.

Below is a (not at all comprehensive) list of some of the more popular data structures and their variants:

• Dynamic arrays
• Dynamic table
• Tiered vector
• Hashed array tree
• Extendible array
• Linked lists
• Singly-linked lists
• Doubly-linked lists
• XOR-linked lists
• Skip lists
• Hash tables
• Chained hash tables
• Linear probing hash tables
• Quadratic probing hash tables
• Double hash tables
• Cuckoo hash tables
• Perfect hash tables
• Dynamic perfect hash tables
• Binary trees
• Red/black trees
• Interval trees
• Binary search trees
• Segment trees
• AVL trees
• AA trees
• Splay trees
• Scapegoat trees
• Treap
• Priority queues
• Binary heap
• Binomial heap
• Fibonacci heap
• van Emde Boas tree
• Skew binomial heap
• Brodal queue
• Radix trees
• Trie
• Patricia tree
• Ternary search tree
• Multiway trees
• B tree
• B+ tree
• B* tree
• Geometric trees
• Quadtree
• Octree
• kd-Tree
• BSP-tree
• R-tree
• Geometric structures
• Winged-edge
• Quadedge
• Network connectivity structures
• Disjoint-set forest
• Link/cut tree
• Top tree
• Graphs
• DAG
• Directed graph
• Undirected graph
• Hypergraph

Links:

33477 questions
31 answers

### What and where are the stack and heap?

What are the stack and heap? Where are they located physically in a computer's memory? To what extent are they controlled by the OS or language run-time? What is their scope? What determines their sizes? What makes one faster?
mattshane
• 93,073
• 3
• 17
• 5
20 answers

### What is the difference between Python's list methods append and extend?

What's the difference between the list methods append() and extend()?
Claudiu
• 224,032
• 165
• 485
• 680
22 answers

### How to sort a list of dictionaries by a value of the dictionary in Python?

How do I sort a list of dictionaries by a specific key's value? Given: [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}] When sorted by name, it should become: [{'name': 'Bart', 'age': 10}, {'name': 'Homer', 'age': 39}]
masi
• 118
• 3
• 5
• 9
19 answers

### Why is Dictionary preferred over Hashtable in C#?

In most programming languages, dictionaries are preferred over hashtables. What are the reasons behind that?
Nakul Chaudhary
• 25,572
• 15
• 44
• 47
7 answers

### Ukkonen's suffix tree algorithm in plain English

I feel a bit thick at this point. I've spent days trying to fully wrap my head around suffix tree construction, but because I don't have a mathematical background, many of the explanations elude me as they start to make excessive use of mathematical…
Nathan Ridley
• 33,766
• 35
• 123
• 197
40 answers

### Simplest code for array intersection in javascript

What's the simplest, library-free code for implementing array intersections in javascript? I want to write intersection([1,2,3], [2,3,4,5]) and get [2, 3]
Peter
• 127,331
• 53
• 180
• 211
32 answers

### How do you implement a Stack and a Queue in JavaScript?

What is the best way to implement a Stack and a Queue in JavaScript? I'm looking to do the shunting-yard algorithm and I'm going to need these data-structures.
KingNestor
• 65,976
• 51
• 121
• 152
83 answers

### What are the lesser known but useful data structures?

There are some data structures around that are really useful but are unknown to most programmers. Which ones are they? Everybody knows about linked lists, binary trees, and hashes, but what about Skip lists and Bloom filters for example. I would…
f3lix
• 29,500
• 10
• 66
• 86
8 answers

### How to check if a specific key is present in a hash or not?

I want to check whether the "user" key is present or not in the session hash. How can I do this? Note that I don't want to check whether the key's value is nil or not. I just want to check whether the "user" key is present.
Mohit Jain
• 43,139
• 57
• 169
• 274
27 answers

### How to implement a tree data-structure in Java?

Is there any standard Java library class to represent a tree in Java? Specifically I need to represent the following: The sub-tree at any node can have an arbitrary number of children Each node (after the root) and it's children will have string…
ikl
• 5,509
• 3
• 16
• 4
17 answers

### How does a hash table work?

I'm looking for an explanation of how a hash table works - in plain English for a simpleton like me! For example, I know it takes the key, calculates the hash (I am looking for an explanation how) and then performs some kind of modulo to work out…
Arec Barrwin
• 61,343
• 9
• 29
• 25
4 answers

### Graph visualization library in JavaScript

I have a data structure that represents a directed graph, and I want to render that dynamically on an HTML page. These graphs will usually be just a few nodes, maybe ten at the very upper end, so my guess is that performance isn't going to be a big…
Chris Farmer
• 24,974
• 34
• 121
• 164
29 answers

### How to detect a loop in a linked list?

Say you have a linked list structure in Java. It's made up of Nodes: class Node { Node next; // some user data } and each Node points to the next node, except for the last Node, which has null for next. Say there is a possibility that the…
jjujuma
• 22,055
• 12
• 44
• 46
15 answers

### When should I use a List vs a LinkedList

When is it better to use a List vs a LinkedList?
Jonathan Allen
• 68,373
• 70
• 259
• 447
20 answers

### How to implement a queue using two stacks?

Suppose we have two stacks and no other temporary variable. Is to possible to "construct" a queue data structure using only the two stacks?
Nitin
• 15,151
• 8
• 23
• 14