linked data structures:

11
Linked Data Structures: Chapter 9, Slide 1 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.

Upload: braith

Post on 05-Jan-2016

30 views

Category:

Documents


1 download

DESCRIPTION

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:. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Linked Data Structures:

Linked Data Structures:

Chapter 9, Slide 1

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.

Page 2: Linked Data Structures:

Chapter 9, Slide 2

J

E

KB

DA NULL NULL NULL NULL

NULL

NULL NULL

Depth first traversal will produce alphabetically ordered sequence:

A B D E J K

Page 3: Linked Data Structures:

Chapter 9, Slide 3

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.

Page 4: Linked Data Structures:

Chapter 9, Slide 4

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.

Page 5: Linked Data Structures:

Chapter 9, Slide 5

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:

root

address4398592

NULL NULLd

Page 6: Linked Data Structures:

Chapter 9, Slide 6

root

address4398592

NULLd NULL NULLc

root

address4398592

address4399604

NULL NULLcd

NULL NULLe

Page 7: Linked Data Structures:

Chapter 9, Slide 7

root

address4398592

address4399604

d NULLc

NULL NULLe NULL NULLa

root

address4398592

address4399604

address4399648

d NULLc

NULL NULLe NULLa

NULL NULLb

Page 8: Linked Data Structures:

Chapter 9, Slide 8

(1,0)

root

address4398592

address4399604

address4399648

(1,12) (2,0)d (2,12) (0,0)c

(0,0) (3,0)a(0,0) (0,0)e

(0,0) (0,0)b

The tree is build, now we start the relativization process:

Page 9: Linked Data Structures:

(1,0)

root

address8904304

address8905200

address8905284

(1,12) (2,0)d (2,12) (0,0)c

(0,0) (3,0)a(0,0) (0,0)e

(0,0) (0,0)b

Chapter 9, Slide 9

We deliberately designed the structure/class NODE so that it hassize of 12 bytes, but 3 bytes are wasted on padding:

NULL NULLa

Page 10: Linked Data Structures:

Chapter 9, Slide 10

We can compact the nodes with no space wasted:

NULL NULLa

But then we cannot use p->lch or p->rch, we must have our custom-made access functions: analyze chapter9_5 program.

NULLb NULL NULLa c NULL NULLe NULL d

croot

Page 11: Linked Data Structures:

Chapter 9, Slide 11

After relativization:

37

croot

0b 0 0a 1 10c 0 0e 0 19d 28

1 2 6 10 11 15 19 20 24 2829

33 37 38 42

End of slides for chapter 9