This project is a personal one, intended to increase my understanding of data structures and the algorithms that act on them.
The basic idea is to implement each of the common data structures; determine the worst, average, and best case time complexity for insertion, deletion, and lookup of values for each; and determine the worst, average, and best case time complexity for the algorithms that act upon them (particularly sorting algorithms).
I'll implement each data structure in order:
- Ruby
- Objective-C
- Java
- Erlang
- C++
I'll implement each data structure twice in each language,
- Once using standard libraries for the language (Hashes in Ruby, NSDictionary in Objective-C, etc.)
- A second time using only language primitives (No libraries)(Arrays are acceptable)
A list of Data Structures to implement:
- Linear Data Structures
- Arrays
- Array (Usually a language primitive - not going to implement myself)
- Bidirectional Map (Started implementing, but decided to learn more about structures to back it first)
- Bit array
- Bit field
- Bit board
- Bit map
- Circular buffer
- Control table
- Image
- Dynamic Array (Vector or ArrayList)
- Gap Buffer
- Hashed array tree
- Heightmap
- Lookup table
- Matrix
- Parallel array
- Sorted array
- Sparse array
- Sparse matrix
- Lliffe vector
- Variable-length array
- Lists
- Double linked list
- Linked list # Check! (Still need to add error handling)
- Self-organizing list
- Skip list
- Unrolled linked list
- Vlist
- Xor linked list
- Zipper
- Doubly connected edge list
- Difference list
- Arrays
- Trees
- Binary Trees
- AA tree
- AVL tree
- Binary search tree
- Binary tree
- Cartesian tree
- Pagoda
- Randomized binary search tree
- Red-black tree
- Rope
- Scapegoat tree
- Self-balancing binary search tree
- Splay tree
- T-tree
- Tango tree
- Threaded binary tree
- Top tree
- Treap
- Weight-balanced tree
- B-trees
- B-tree
- B+ tree
- B*-tree
- Dancing tree
- 2-3 tree
- 2-3-4 tree
- Queap
- Fusion tree
- Bx-tree
- Heaps
- Heap
- Binary heap
- Binomial heap
- Fibonacci heap
- AF-heap
- 2-3 heap
- Soft heap
- Pairing heap
- Leftist heap
- Treap
- Beap
- Skew heap
- Ternary heap
- D-ary heap
- Multiway Trees
- Ternary tree
- K-ary tree
- And-Or tree
- (a,b)-tree
- Link/cut tree
- SPQR-tree
- Spaghetti stack
- Disjoint-set data structure
- Fusion tree
- Enfilade
- Exponential tree
- Fenwick tree
- Van Emde Boas tree
- Trees
- Tree
- Radix tree
- Suffix tree
- Suffix array
- Compressed suffix array
- FM-index
- Generalized suffix tree
- B-tree
- Judy array
- Ctree
- Space partitioning trees
- Segment tree
- Interval tree
- Range tree
- Bin
- Kd-tree
- Implicit kd-tree
- Min/max kd-tree
- Adaptive kd-tree
- Quadtree
- Octree
- Linear octree
- Z-order
- UB-tree
- R-tree
- R+ tree
- R* tree
- Hilbert R-tree
- X-tree
- Metric tree
- Cover tree
- M-tree
- VP-tree
- BK-tree
- Bounding interval hierarchy
- BSP tree
- Rapidly exploring random tree
- Application Specific Trees
- Abstract syntax tree
- Parse tree
- Decision tree
- Alternating decision tree
- Minimax tree
- Expectiminimax tree
- Finger tree
- Expression tree
- Binary Trees
- Hashes
- Bloom filter
- Count min sketch
- Distributed hash table
- Double hashing
- Dynamic perfect hash table
- Hash array mapped trie
- Hash list
- Hash table
- Hash tree
- Hash trie
- Koorde
- Prefix hash tree
- Rolling hash
- MinHash
- Graphs
- Graph
- Adjacency list
- Adjacency matrix
- Graph-structured stack
- Scene graph
- Binary decision diagram
- Zero supressed decision diagram
- And-inverter graph
- Directed graph
- Directed acyclic graph
- Propositional directed acyclic graph
- Multigraph
- Hypergraph
- Other
- Lightmap
- Winged edge
- Doubly connected edge list
- Quad-edge
- Routing table
- Symbol table