Dynamic Data Structures
• Stacks, Queues and Binary Trees hold dynamic data
The Stack
Empty Stack with 7 Spaces
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
JamesStack Pointer
Stack is Pushed
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Stack is Pushed
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Stack is Pushed
Jack
Stephen
Alex
JanineAndrew
Ben
Stelhan
James
Stack Pointer
Stack is Pushed
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Stack is Pushed
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Stack is Pushed
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Stack is Pushed
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Stack is Pushed
ERROR!
Stack Overflow
Jack cannot be added
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
We would now like to remove Stephen from the stack
Stacks work on a last in first out principal (LIFO)
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Stack is Popped
Stephen remains in the stack but the pointer moves down
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
We now wish to add Jack
Jack
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Stack is Pushed
Jack overwrites Stephen and the stack pointer moves back up
Jack
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Stack is Popped
Jack
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Stack is Popped
Jack
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Stack is Popped
Jack
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
Stack is Popped
Jack
Alex
Janine
Andrew
Ben
Stelhan
James
Stack Pointer
We now wish to add Jim
Jim
Jack
Alex
Janine
Jim
Ben
Stelhan
James
Stack Pointer
Stack is Pushed
What if the stack is empty and you pop it?
ERROR!
Stack Underflow
Uses of a stack
• When a program is being run, and another program interrupts it e.g. to access the hard disk, the details of the first program are put on the stack until the interruption is dealt with. The details are then taken off the stack (popped) in order to continue.
• Or if you are using a loop, the details of each successive loop may be stored on the stack
The Queue
• A good example is a print queue or when you type on a keyboard the letters typed are queued
• There are two pointers in a queue, the first points at the next item to be leave the queue and the other points at the location for the next item to go into the queue
• Unlike a stack, a queue uses FIFO – first in first out
The Queue
Stephen
Next item to take
Next available location
AndrewStelhan
James
Ben
Janine
Alex
Jack
The Queue
Stephen
Next item to take
Next available location
AndrewStelhan
James
Ben
Janine
Alex
Jack
The Queue
Stephen
Next item to take
Next available location
AndrewStelhan
James
Ben
JanineAlex
Jack
The Queue
Next item to take
Next available location
AndrewStelhan
James
Ben
JanineAlex Jack
The Queue
Next item to take
Next available location
Stelhan
James
BenJanineAlex Jack
The Queue
Next item to take
Next available location
James BenJanineAlex Jack
Circular Queue
Next Location to take
Next available location
Steve
Ben
JackJames
Using a stack to reverse the elements of a queue
The Queue
Back of queue
Front of queue
James BenJanineAlex Jack
Stack
The Queue
Back of queue
Front of queue
James
Ben
Janine
Alex
Jack Stack
The Queue
Back of queue
Front of queue
JamesBen Janine AlexJack
Stack
The Binary Tree
ABCDEFGHIJKLMNOPQRSTUVWXYZ
This alphabet is a visual aid to help us assemble our binary tree
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
These names will be added to the Binary Tree
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Jack
Stephen
Alex
Janine
Andrew
Ben
Stelhan
James
Stelhan comes after James in the alphabet so goes right
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Jack
Stephen
Alex
Janine
Andrew
Ben Stelhan
James
Ben is before James in the alphabet so goes left
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Jack
Stephen
Alex
Janine
Andrew
Ben Stelhan
James
Andrew is before James so goes left, he is also before Ben so goes left again
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Jack
Stephen
Alex
JanineAndrew
Ben Stelhan
James
Janine is after James but before Stelhan
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Jack
Stephen
Alex
JanineAndrew
Ben Stelhan
James
Alex comes before James, Ben and Andrew
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Jack
Stephen
Alex
JanineAndrew
Ben Stelhan
James
Stephen comes after James and Stelhan
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Jack Stephen
Alex
JanineAndrew
Ben Stelhan
James
Jack is before James and after Ben
Jack Stephen
Alex
JanineAndrew
Ben Stelhan
JamesRoot Node Parent Child Node
Leaf Node
Left Subtree Right Subtree
Traversing a binary Tree
• Preorder Traversal
• Inorder Traversal
• Postorder Traversal
Preorder Traversal
• Start at root node• Traverse the left hand subtree• Traverse the right hand subtree• D B A C F E G
C
B F
A E G
D
Inorder Traversal
• Traverse the left hand subtree• Visit the root node• Traverse the right hand subtree• A B C D E F G
C
B F
A E G
D
Postorder Traversal
• Traverse the left hand subtree• Traverse the right hand subtree• Return to the root node• A C B E G F D
C
B F
A E G
D
Questions
• What is meant by the term ‘pushing’ and ‘popping’
• The name ‘Robert’ is pushed onto an empty stack, followed by ‘Felicity’, ‘Martin’ and ‘Sam’. What data will be on the stack after the following operations? Pop stack, push ‘Henry’, push ‘George’, pop stack.
• Explain the purpose of the stack pointer
Tasks
• Create a binary tree for the following people:
Jim, Tom, Bob, Bill, Percy, Toby, John, Jack and Terry
• Create your own notes to explain a stack
• Create your own notes to explain a queue