110 likes | 226 Views
Linked Data Structures:. Linked data structures - versatile data structures to model complex real world situations and entities. List, stacks, trees, graphs etc. just to mention some. Consider a simple binary search tree for characters:. Analyze chapter9_1 program:.
E N D
Linked Data Structures: Linked data structures - versatile data structures to model complex real world situations and entities. List, stacks, trees, graphs etc. just to mention some. Consider a simple binary search tree for characters: Analyze chapter9_1 program: Average time complexity to search for an item is O(n log n) Organization: Binary tree, left child has value less than the parent, the right child has value greater than the parent. Chapter 9, Slide 1
E B K NULL A D J NULL NULL NULL NULL NULL NULL Depth first traversal will produce alphabetically ordered sequence: A B D E J K Chapter 9, Slide 2
The nature of “links” -- usually pointers, but any reference will do: Analyze chapter9_2 program: The references are array indexes (arrays are modeled on memory!). This will work fine for a tree with up to 100 nodes. A natural way to serialize a binary tree. Not necessarily are linked data structures created on the heap only: Analyze chapter9_3 program that is a recursive descent parser for a list of characters separated by commas and builds a binary search tree on the stack. Though, it is not very practical. Most commonly, linked data structures are linked by pointers and are build on the heap. Chapter 9, Slide 3
Pointer-based linked data structures are “flexible”, which is mostly good, however it is bad for “moving” the structure elsewhere in memory, or “transmitting” it over a communication channel, or “recording” it to auxiliary memory. • compaction: we say that a linked data structure is compacted if it occupies a contiguous segment of memory and all pointers (addresses) are relative to the beginning of that segment. • serialization: we say that a linked data structure is serialized if it occupies several contiguous segments of memory and all pointers (addresses) are relative to the beginning of that segment where the pointer is stored. • Thus compaction is the extreme form of serialization. A serialized structure can easily by “moved” in memory just by “moving” the whole segment(s), “transmitted” byte by byte over a communication channel, or “recorded” to auxiliary memory and later restored. Chapter 9, Slide 4
Illustration of serialization+allocation from arena: chapter9_4 program. The “relativized” addresses are a pair of short integers, the first is segment+1 and the second is offset. Let us now visualize the arena after each stage of the process. First “building” the tree: Chapter 9, Slide 5
The tree is build, now we start the relativization process: Chapter 9, Slide 8
We deliberately designed the structure/class NODE so that it has size of 12 bytes, but 3 bytes are wasted on padding: Chapter 9, Slide 9
We can compact the nodes with no space wasted: But then we cannot use p->lch or p->rch, we must have our custom-made access functions: analyze chapter9_5 program. Chapter 9, Slide 10
After relativization: End of slides for chapter 9 Chapter 9, Slide 11