Copyright (c) Hyperion Entertainment and contributors.
Data Structures
Data Structures
Splay Trees
Splay trees are a form of binary tree which organizes itself in response to insertions and searches. Whenever a search finds a specific tree node, that node is "pulled up" into the tree root, and the tree is subsequently reorganized. This reorganization is called "splaying" and has the effect of making the tree flatter, shortening the distances between the root and leaf nodes. Also, more frequently-used nodes will move more closely to the root of the tree during each splay operation. The more splay operations are performed, the more closely the tree will represent the frequency of the node accesses, and will eventually place the most frequently-used nodes close to the root of the tree. This self-organization makes splay trees well-suited for use in caches or dictionaries. Because search operations will modify the splay tree, you should always use an arbitration mechanism such as a Mutex if you share the same splay tree with several Tasks or Processes.
See Wikipedia for more generic information about splay trees.
CreateSplayTree() | Allocate a splay tree data structure. |
DeleteSplayTree() | Free a splay tree and all its nodes. |
FindSplayNode() | Search for a key in a splay tree. |
InsertSplayNode() | Insert a new key into a splay tree. |
RemoveSplayNode() | Remove a node from a splay tree. |
Skip Lists
Skip lists combine linked lists with a look-ahead data structure which makes search and insertion operations efficient. You can add data in any particular order to the skip list, and the list will always take care of keeping that data stored in a specific order. The effort spent to maintain this order is small and grows slowly the more list items are added. Traversing the list is very fast and will always return the list items in sorted order. Retrieving specific list items is very efficient, too. Skip lists are useful if you need to be able to retrieve list items in a sorted order at any time while you are building the list. The drawback of skip lists is that the amount of memory required to maintain the list grows faster than the number of list items added.
See Wikipedia for more generic information about skip lists.
CreateSkipList() | Allocate a skip list data structure. |
DeleteSkipList() | Free a skip list and all its nodes. |
FindSkipNode() | Search for a key in a skip list. |
GetFirstSkipNode() | Get a pointer to the first node of a skip list. |
GetNextSkipNode() | Get a pointer to the following node in a skip list. |
InsertSkipNode() | Insert a new key into a skip list. |
RemoveSkipNode() | Remove a node from a skip list. |